apache-pig - 拉丁 pig 包在分组后进行元组

标签 apache-pig

我有以下带有架构的数据 (t0: chararray,t1: int,t2: int)

(B,4,2)
(A,2,3)
(A,3,2)
(B,2,2)
(A,1,2)
(B,1,2)

我想生成以下结果(按 t0 分组,按 t1 排序)

(A, ((1,2),(2,3),(3,2)))
(B, ((1,2),(2,2),(4,2)))

请注意,我只想要第二个组件中的元组,而不是包。请帮忙。

最佳答案

你应该可以这样做。

-- A: (t0: chararray,t1: int,t2: int)

B = GROUP A BY t0 ;
C = FOREACH B {
            -- Project out the first column of A.
            projected = FOREACH A GENERATE t1, t2 ;
            -- Now you can order the projection.
            ordered = ORDER projected BY t1 ;
    GENERATE group AS t0, ordered AS vals ;
}

您可以阅读更多关于嵌套 FOREACHs here 的信息.

注意/更新:似乎当我最初回答这个问题时,我错过了提问者要求输出为元组形式的部分。只有当您知道元组中字段的确切数量和位置时,才应使用元组。否则,您的架构将不会被定义,并且访问这些字段将非常非常困难。这是因为整个元组将被视为一个字节数组,因此您必须手动查找和 cast一切。

如果你必须这样做,你不能在纯 pig 身上这样做。您必须使用某种 UDF去做这个。我会推荐 Python。

关于apache-pig - 拉丁 pig 包在分组后进行元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19948614/

相关文章:

json - 加入 Apache Pig

apache-pig - Pig 本地模式、组或连接 = java.lang.OutOfMemoryError : Java heap space

hadoop - Hadoop 上的临时查询

hadoop - Pig Latin区分Map或Reduce查询

mongodb - MongoDB Hadoop PIG脚本引发 “Undefined Parameter :gte”异常

hadoop - 无论顺序如何,都需要从PIG中的关系中提取不同的元组,即(1,2)=(2,1)

hadoop - Pig 0.12.0 - 从字符串中提取最后两个字符

hadoop - 无法解析 Apache Pig 中的 Over()

hadoop - 将 json 文件加载到 PIG

hadoop - 为什么 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快