如何从PIG中生成的包(其大小可能不同)中提取第一个元组?

时间:2012-06-20 06:28:42

标签: hadoop apache-pig

我正在生成一个“包”信息,其大小(包内的元组数)可能会有所不同。从这里,我想动态提取第一个元素。我该怎么做?

3 个答案:

答案 0 :(得分:8)

答案 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;
}