我编写了一个Pig脚本,它将通过Python UDF执行一些图像处理。
在做了一些操作后,我有类似的东西(例如):
A = load 'data.txt' using PigStorage('|') as (name:chararray, pixelIntensity:float);
B = group A by pixelIntensity;
dump B;
B就是这样的:
(131.0,{(image1,jpg,131.0), (image2.jpg,131.0), (image3.jpg,131.0)})
(140.0,{(image5.jpg,140.0), (image5.jpg,140.0)})
(150.0,{(image4.jpg,150.0})
如果我要去
dump A;
我会得到以下内容:
(image1.jpg,131.0)
(image2.jpg,131.0)
(image3.jpg,131.0)
(image4.jpg,150.0)
(image5.jpg,140.0)
所以我基本上将他们的平均像素强度作为关键字进行分组。
我的问题是:
我能从B中的每一行中仅提取1个元素吗?所以,例如,我会喜欢
(image1.jpg,131.0)
(image4.jpg,150.0)
...
答案 0 :(得分:0)
带FOREACH
的嵌套LIMIT
应该可以满足您的需求:
A = LOAD 'data' using PigStorage(',') AS (name:chararray,pixelIntensity:float);
B = GROUP A BY pixelIntensity;
C = FOREACH B {
D = LIMIT A 1;
GENERATE flatten(D);
};
STORE C INTO 'res';