Apache Pig:将两个数据集附加到一个

时间:2014-07-11 03:30:09

标签: apache-pig union

我有两个数据集

第1集A

(111)

(222)

(555)

第二组B

(333)

(444)

(666)

我做了 C = UNION A,B;

附加两个数据集后,输出应该是第一个数据集和下一个第二个数据集

预期输出C

(111)

(222)

(555)

(333)

(444)

(666)

但我的输出C是

(333)

(444)

(666)

(111)

(222)

(555)

如果我申请工会,结果将无法完成 我很难按照固定的顺序追加它们 我怎样才能做到这一点 ? 我无法想到任何帮助,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

为每个给出file_number的文件添加一个额外的列,然后对修改后的数据集进行并集,然后根据给出' file_number'

的列进行排序
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;

答案 1 :(得分:0)

我尝试过经典联盟,对我来说数据保持有序。

但是如果它没有,那就试着强迫它吧。)

正如我在之前的评论中所说的那样,它没有效率,但却能胜任。

--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.TXT

111
222
555

和B.txt:

333
444
666