我正在生成一个“包”信息,其大小(包内的元组数)可能会有所不同。从这里,我想动态提取第一个元素。我该怎么做?
答案 0 :(得分:8)
使用DataFu UDF:FirstTupleFromBag(http://datafu.incubator.apache.org/docs/datafu/1.2.0/datafu/pig/bags/FirstTupleFromBag.html)
答案 1 :(得分:4)
根据the docs,一个包是元组和
的集合行取消引用可以通过名称(bag.field_name)或位置(行李。$ 0)来完成。如果取消引用一组字段(bag。(name1,name2)或bag。($ 0,$ 1)),则表达式表示由指定字段组成的包。
但要小心,b.$0
并没有给你第一个元组,因为袋子没有订购!你将获得组成元组的第一个元素。
您需要将包转换为有序结构,或者更好,使用UDF。你也应该不接受这个答案(所以我可以删除它)并接受Guarev,而是有一个UDF的链接。
答案 2 :(得分:1)
如果包中的元组的排序对于获得"第一个"一个(当然是!)然后你可以做类似下面的事情,在https://community.hortonworks.com/questions/22863/cant-we-filter-the-data-which-we-have-done-in-37-s.html#answer-22995更详细地解释。
max_runs = FOREACH grp_data {
inner_sorted = ORDER runs BY runs DESC;
first_row = LIMIT inner_sorted 1;
GENERATE first_row AS most_hits;
}