如何在Pig中将一个组变成一个单元组?

use*_*009 8 hadoop apache-pig

由此:

(1, {(1,2), (1,3), (1,4)} )
(2, {(2,5), (2,6), (2,7)} )
Run Code Online (Sandbox Code Playgroud)

......我们怎么能产生这个?

((1,2),(1,3),(1,4))
((2,5),(2,6),(2,7))
Run Code Online (Sandbox Code Playgroud)

......我们怎么能产生这个呢?

(1, 2, 3, 4)
(2, 5, 6, 7)
Run Code Online (Sandbox Code Playgroud)

对于单行,我知道该怎么做.问题是我必须迭代多行并同时操作内部组.

zsx*_*ing 11

对于您的问题,我准备了以下文件:

1,2
1,3
1,4
2,5
2,6
2,7
Run Code Online (Sandbox Code Playgroud)

首先,我使用以下脚本来获取r3您在问题中描述的输入:

r1 = load 'test_file' using PigStorage(',') as (a:int, b:int);
r2 = group r1 by a;
r3 = foreach r2 generate group as a, r1 as b;
describe r3;
-- r3: {a: int,b: {(a: int,b: int)}}
-- r3 is like (1, {(1,2), (1,3), (1,4)} )
Run Code Online (Sandbox Code Playgroud)

如果我们想要生成以下内容,

(1, 2, 3, 4)
(2, 5, 6, 7)
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下脚本:

r4 = foreach r3 generate a, FLATTEN(BagToTuple(b.b));
dump r4;
Run Code Online (Sandbox Code Playgroud)

对于以下内容,

((1,2),(1,3),(1,4))
((2,5),(2,6),(2,7))
Run Code Online (Sandbox Code Playgroud)

我找不到任何有用的内置函数.也许你需要编写自定义的BagToTuple.这是内置的BagToTuple源代码:http://www.grepcode.com/file/repo1.maven.org/maven2/org.apache.pig/pig/0.11.1/org/apache/pig/builtin/BagToTuple. Java的#BagToTuple.getOuputTupleSize%28org.apache.pig.data.DataBag 29%