列出猪中的关系
List relationships in pig
我有一个这样的列表:
a, 2
b, 1
a, 5
c, 5
d, 3
a, 3
我想将其转换为:
a, 2,3,5
b, 1
c, 5
d, 3
换句话说,我需要找到与字母相关的数字。
我在想的是,我可以过滤并获得唯一字母列表 (a、b、c、d),然后对于每个字母,我需要找到相关的数字。
如何找到所有相关的号码?我需要一个一个地做吗?如果我有一个非常大的数据集,它会起作用吗?或者我可以使用 pig 中的一些工具来完成此操作。
你能试试这个吗?
输入:
a, 2
b, 1
a, 5
c, 5
d, 3
a, 3
PigScript:
A = LOAD 'input' USING PigStorage(',') AS (col1:chararray,col2:chararray);
B = GROUP A BY col1;
C = FOREACH B {
sortedRow = ORDER A BY col2 ASC;
GENERATE group,FLATTEN(REPLACE(BagToString(sortedRow..col2),'_\s+',','));
}
STORE C INTO 'output' USING PigStorage(',');
输出:(将存储在output/part*
文件中)
a, 2,3,5
b, 1
c, 5
d, 3
我有一个这样的列表:
a, 2
b, 1
a, 5
c, 5
d, 3
a, 3
我想将其转换为:
a, 2,3,5
b, 1
c, 5
d, 3
换句话说,我需要找到与字母相关的数字。
我在想的是,我可以过滤并获得唯一字母列表 (a、b、c、d),然后对于每个字母,我需要找到相关的数字。
如何找到所有相关的号码?我需要一个一个地做吗?如果我有一个非常大的数据集,它会起作用吗?或者我可以使用 pig 中的一些工具来完成此操作。
你能试试这个吗?
输入:
a, 2
b, 1
a, 5
c, 5
d, 3
a, 3
PigScript:
A = LOAD 'input' USING PigStorage(',') AS (col1:chararray,col2:chararray);
B = GROUP A BY col1;
C = FOREACH B {
sortedRow = ORDER A BY col2 ASC;
GENERATE group,FLATTEN(REPLACE(BagToString(sortedRow..col2),'_\s+',','));
}
STORE C INTO 'output' USING PigStorage(',');
输出:(将存储在output/part*
文件中)
a, 2,3,5
b, 1
c, 5
d, 3