我已经把手套分成了一个袋子:
FOREACH sampleData GENERATE $0, (bag{tuple()}) TOBAG($1..) AS samples:bag{t:tuple()};
我知道如何找到最大值:
sampleMax = FOREACH sampleOfData GENERATE $0, MAX(samples);
但是我想说“subelement_1”如果最大值是袋子的参数$ 0。问题是袋子大小没有必要一致。
任何帮助都将不胜感激。
答案 0 :(得分:1)
基本上你需要一个考虑重复的argwhere()
函数。你可以使用python UDF。
数据强>:
(K1,{(K1,0),(K1,4),(K1,4),(K1,1)})
(K2,{(K2,5),(K2,5),(K2,1),(K2,2)})
<强> UDF 强>:
@outputSchema("max_idx:(index:int)")
def argmax_idx(bag):
try:
nums = [x[1] for x in bag]
m = max(nums)
idxs = tuple([i for i in xrange(len(nums)) if nums[i] == m])
return idxs
except:
return tuple(None)
<强>脚本强>:
REGISTER 'argmax_idx.py' USING jython AS udf;
data = LOAD 'some_data';
A = FOREACH data GENERATE udf.argmax_idx(data);
DUMP A;
<强>输出强>:
(K1, (1,2))
(K2, (0,1))
请注意,Pig
为零索引。