我有架构的以下数据 (t0: chararray,t1: int,t2: int)
(B,4,2)
(A,2,3)
(A,3,2)
(B,2,2)
(A,1,2)
(B,1,2)
Run Code Online (Sandbox Code Playgroud)
我想生成以下结果(按t0分组,按t1排序)
(A, ((1,2),(2,3),(3,2)))
(B, ((1,2),(2,2),(4,2)))
Run Code Online (Sandbox Code Playgroud)
请注意我只想要第二个组件中的元组,而不是包.请帮忙.
你应该能够这样做.
-- 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 ;
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关嵌套FOREACHs的更多信息.
注意/更新:当我回答这个问题时,我似乎错过了提问者要求输出为元组形式的部分.只有在知道元组中字段的确切数量和位置时才应使用元组.否则,您的架构将不会被定义,并且访问这些字段将非常困难.这是因为整个元组将被视为一个字节组,所以你将手工必须找到并投了一切.
如果你必须这样做,你不能在纯猪中这样做.你必须使用某种UDF来做到这一点.我会推荐Python.
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |