我有两个数据集
第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)
如果我申请工会,结果将无法完成 我很难按照固定的顺序追加它们 我怎样才能做到这一点 ? 我无法想到任何帮助,我们将不胜感激。
答案 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