hadoop - 合并和覆盖 pig 中的数据集

标签 hadoop join merge apache-pig

我有 3 组数据,格式都是 (acctid:chararray, rule:chararray, value:charrarray)

设置 1 个文件:

123;R1;r1 version set 1 123
123;R2;r2 version set 1 123
123;R3;r3 version set 1 123
124;R1;r1 version set 1 124
124;R2;r2 version set 1 124
124;R3;r3 version set 1 124

设置 2 文件://更改 R2

123;R2;r2 version set 2 123
124;R2;r2 version set 2 124

设置 3 文件:

123;R4;r4 version set 3 123
124;R4;r4 version set 3 124

我需要这样合并数据:

  • 在第一个数据集中,R2 值更改为第二个数据集中的值

  • R3 值被移除

  • 添加 R4 值

然后我可以按帐户 ID 进行分组并获得:

最后:

123;R1;r1 version set 1 123
123;R2;r2 version set 2 123
123;R4;r4 version set 3 123
124;R1;r1 version set 1 124
124;R2;r2 version set 2 124
124;R4;r4 version set 3 124

我尝试了各种连接和合并,但我不知道这是否可行。谢谢

最佳答案

试试这个,它会给出所需的输出

set_1 = LOAD '/home/abhis/set_1' USING PigStorage(';') AS (acctid:chararray, rule: chararray, value: chararray);
set_2 = LOAD '/home/abhis/set_2' USING PigStorage(';') AS (acctid:chararray, rule: chararray, value: chararray);
set_3 = LOAD '/home/abhis/set_3' USING PigStorage(';') AS (acctid:chararray, rule: chararray, value: chararray);


DATA_SET1 = FILTER set_1 BY (rule matches '.*R1.*');

DATA_SET2 = UNION DATA_SET1,set_2,set_3;
DATA_SET3 = ORDER DATA_SET2 by acctid,rule;
dump DATA_SET3;

输出

(123,R1,r1 version set 1 123)
(123,R2,r2 version set 2 123)
(123,R4,r4 version set 3 123)
(124,R1,r1 version set 1 124)
(124,R2,r2 version set 2 124)
(124,R4,r4 version set 3 124)

关于hadoop - 合并和覆盖 pig 中的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32746397/

相关文章:

linux - 无法通过 hadoop Web 控制台在 hadoop 上创建目录

hadoop - 由于默认别名 (_c3) 而导致的语法错误

mysql 连接查询

azure - 在文档数据库中使用 JOIN 进行查询

java - Hadoop的java.lang.VerifyError

hadoop - 如何读取RC文件内容

sql-server - 在没有连接的情况下,t-sql 更新如何工作

mercurial - Mercurial : branch vs. 克隆和部分 merge 的最佳实践?

svn - 如何重新集成分支,覆盖尚未合并到分支中的主干更改?

c# - 为 .NET 合并和压缩 PDF 文件的最佳第三方程序集是什么?