2012-08-24 5 views
6

例をFOREACH演算子を適用します。一方で、豚は:袋内の各要素に

class: {teacher_name: chararray,students: {(firstname: chararray, lastname: chararray)} 

が、私は各生徒の操作を実行したい:私は学生のネストされた袋との関係「クラス」を、持っています

class: {teacher_name: chararray,students: {(fullname: chararray)} 

各学生、フルネーム= CONCATについて(FIRSTNAME、姓)

私の理解では、ネストされたFOREACHのように、ここに私の解決策ではないことである:得る、すなわち、手つかずのグローバルな構造を残します入力タプルごとに1つのレコードしか生成しませんが、私は各バッグアイテム内に適用されるものを必要とします。

UDFで行うのはかなり簡単

それはPIG 0.10で純粋Piglatinに

答えて

19

それを行うことが可能かどうFOREACHはFOREACHで入れ子にすることができるよう、それは、UDFなしに可能であると思いました。ここに例があります:

inpt = load '~/pig/data/bag_concat.dat' as (k : chararray, c1 : chararray, c2 : chararray); 
dump inpt; 
1 q w 
1 s d 
2 q a 
2 t y 
2 u i 
2 o p 

bags = group inpt by k; 
describe bags; 

bags: {group: chararray,inpt: {(k: chararray,c1: chararray,c2: chararray)}} 

result = foreach bags { 
    concat = foreach inpt generate CONCAT(c1, c2); --it will iterate only over the records of the inpt bag 
    generate group, concat; 
}; 
dump result; 

(1,{(qw),(sd)}) 
(2,{(qa),(ty),(ui),(op)}) 
+0

ネストされたforeachの使い方は、あなたが何をしたのか、それはグループの後に生成することができます。あまりシーンがないようです。説明してください。 –

+0

ネストされたforeachは、バッグの要素を繰り返したので、保存されたバッグがありました。あなたが袋を保存する必要がない場合は、平らな戦闘よりも、それは問題ではありませんでした。 – alexeipab

関連する問題