我是猪的新手。我想使用iid字段组合来自两个关系A和B的多个列。这似乎很简单,但我无法弄清楚如何正确地做到这一点,我已尝试加入,但由于没有共同的列,所以没有任何内容。
所以这是我的数据:
A
FullName Age CIN
B
evaluation productivty
我希望我的输出是这样的:
FullName Age CIN Evaluation Productivty
.. .. .. .. ..
由于
答案 0 :(得分:0)
加载两个关系并与所有列创建新关系。假设两个文件具有相同的行数,并且字段以制表符分隔。您可以根据数据使用正确的数据类型。
A = LOAD 'data1.txt' USING PigStorage('\t') as (FullName:chararray,Age:int,CIN:int);
B = LOAD 'data2.txt' USING PigStorage('\t') as (Evaluation:chararray,Productivity:chararray);
C = FOREACH A GENERATE A.Fullname,A.Age,A.CIN,B.Evaluation,B.Productivity;
DUMP C;
答案 1 :(得分:0)
您需要一个公用密钥才能加入两个表。如果要在没有键的情况下组合两个数据集,可以使用CROSS。它计算两个数据集的叉积。
A = LOAD 'a.txt' AS (FullName, Age, CIN);
B = LOAD 'b.txt' AS (evaluation, productivity);
C = CROSS A,B;
如果您想逐行加入并假设两个文件中的数据都是有序的,您可以使用UniqueID作为黑客(仅限Pig 0.14及更高版本)
A = LOAD 'a.txt' AS (FullName, Age, CIN);
B = LOAD 'b.txt' AS (evaluation, productivity);
A1 = FOREACH A GENERATE *, UniqueID(FullName) AS id;
B1 = FOREACH B GENERATE *, UniqueID(evaluation) AS id;
C = JOIN A1 BY id, B1 BY id;
D = FOREACH C GENERATE FullName, Age, CIN, evaluation, productivity;
这完全取决于UniqueID的实现,如果下一版本中的逻辑发生更改,则可能无法获取所需的结果。