2016-10-11 8 views
0

豚の既存のタプル列に新しい列を追加します。豚:豚の既存の内側タプルに新しい列を追加する

例:入力スキーマ:

name: chararray, 
attribute_list: {innertuple: (height: int,length: int,size: chararray)} 

出力スキーマ:私は長さなどが、いくつかの他の名前と同じ値を保持するタプルの新しい列を追加したい文を生成する使用 。

name: chararray, 
attribute_list: {innertuple: (height: int,length: int,size: chararray, len : int)} 

私はアプローチの下にしようとしたが、そのは動作していない:

op = Foreach input_data generate 
name, 
attribute_list as attr : {(
height, 
length, 
size, 
length as len)}; 

示唆してください。予め

+0

私は豚の文書を読むことをお勧めします。http://pig.apache.org/docs/r0.16.0/start.html –

+0

@RahulSharmaこのアドバイスは悪くありませんが、私はあなたに少なくともヒントをお勧めしますこの場合、ドキュメンテーションのどの部分が関連しているかを示します。 –

答えて

0

オプション1における ありがとう:

はATTRIBUTE_LIST袋を平らに、追加の列を持つバッグを再作成し、各行にランクを加えます。

--Rank input_schema(ip) using rank function: 

ranked= rank ip; 

-- flatten each value of bag.tuple to row level 
a= foreach ranked generate rank_ip as id, flatten(attribute_list.$0), flatten(attribute_list.$0.length) as len; 

b= group a by id; 

op= foreach b generate flatten($1.name) as name, $1 as attr; 

--The name also will be part of attr bag. 

オプション2:

DataFuには、袋の周りに複数のタプルを連結するブタのudfがあります。
b。 UDF BagConcatを作成します。

define BagConcat datafu.pig.bags.BagConcat(); 

c。フラット要素:

a= foreach ip generate name, flatten(attribute_list.$0), flatten(attribute_list.$0.length) as len; 

dあなたのバッグを再投影:

op= foreach a generate name, BagConcat(height,len,size,len) as attr; 
0
A = LOAD 'PATH' USING PigStorage() AS (ID:INT); 
B = FOREACH sourcenew GENERATE *, null as len:int; 

あなたもnullの代わりに任意の整数値を与えることができます。