apache pig:将两个数据集附加到一个

o7jaxewo  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(328)

我有两个数据集
第一组a
(111)
(222)
(555)
第二组b
(333)
(444)
(666)
我做了c=联合a,b;
在附加两个数据集之后,输出应该是第一个数据集和下一个第二个数据集
预期输出c为
(111)
(222)
(555)
(333)
(444)
(666)
但我的输出c是
(333)
(444)
(666)
(111)
(222)
(555)
如果我应用并集,结果不是按顺序的,我很难按设置的顺序附加它们,我该怎么做呢?我想不出有什么办法,但任何帮助我都会感激的。

suzh9iv8

suzh9iv81#

为每个文件添加一个额外的列,给出文件号,然后对修改后的数据集进行并集,然后根据给出“文件号”的列进行排序

A = LOAD 'A.txt' USING PigStorage() AS (a:int);
B = LOAD 'B.txt' USING PigStorage() AS (b:int);
A_mod = FOREACH A GENERATE a, 1 AS file_number;
B_mod = FOREACH A GENERATE b, 2 AS file_number;
unified_mod = UNION A_mod, B_mod;
output = SORT unified_mod BY file_number;
xj3cbfub

xj3cbfub2#

我尝试了经典的联合,对我来说数据保持有序。
但如果不成功,让我们试着强迫它:)
正如我在前面的评论中所说的那样,它效率不高,但它使工作更有效。

--In order to determine nbA you can run the following cmd in the shell : wc -l A.txt
%default nbA 3

A = LOAD 'A.txt' USING PigStorage() AS (a:int);
B = LOAD 'B.txt' USING PigStorage() AS (b:int);

A = RANK A;
B = RANK B;

--DESCRIBE B; 
B = FOREACH B GENERATE rank_B + $nbA, $1;

C= UNION B,A;
C= ORDER C BY $0;
C= FOREACH C GENERATE $1; --If you want to drop the first column
DUMP C;

输出:

(111)
(222)
(555)
(333)
(444)
(666)

哪里:
a、 文本

111
222
555

和b.txt:

333
444
666

相关问题