【发布时间】:2014-04-20 05:13:42
【问题描述】:
假设我JOIN两个关系像:
-- part looks like:
-- 1,5.3
-- 2,4.9
-- 3,4.9
-- original looks like:
-- 1,Anju,3.6,IT,A,1.6,0.3
-- 2,Remya,3.3,EEE,B,1.6,0.3
-- 3,akhila,3.3,IT,C,1.3,0.3
jnd = JOIN part BY $0, original BY $0;
输出将是:
1,5.3,1,Anju,3.6,IT,A,1.6,0.3
2,4.9,2,Remya,3.3,EEE,B,1.6,0.3
3,4.9,3,akhila,3.3,IT,C,1.3,0.3
请注意,$0 在每个元组中显示两次。例如:
1,5.3,1,Anju,3.6,IT,A,1.6,0.3
^ ^
|-----|
我可以通过以下方式手动删除重复键:
jnd = foreach jnd generate $0,$1,$3,$4 ..;
有没有办法动态删除它?喜欢remove(the duplicate key joiner)。
【问题讨论】:
-
据我所知,Pig 目前无法做到这一点。此外,除了您当前的解决方案之外,我能想到的唯一方法是
FOREACH foo GENERATE FLATTEN(remove(TOTUPLE(*), 2));,其中2是要删除的列的位置,remove是一个UDF。我认为您的解决方案要好得多,但是您可以将其缩短为FOREACH jnd GENERATE $0, $1, $3 ..;。 -
我希望有一种方法可以更轻松地做到这一点,但这里有一个很好的语法来手动定义连接的输出:stackoverflow.com/a/17273031/542620
标签: java hadoop join apache-pig