当键分为列时,如何在 Apache Pig 中加入两个商店?

Posted

技术标签:

【中文标题】当键分为列时,如何在 Apache Pig 中加入两个商店?【英文标题】:How do I join two stores in Apache Pig when key is divided into to columns? 【发布时间】:2016-08-24 19:08:37 【问题描述】:

我有两个存储的数据集:

A
ASDFGFG 5 7 8 9
B
ASDFG FG 5 7 8 9

我想通过 A1 和 B1+2 加入这两个数据集。我知道数据集 A 中的 col 1 等于数据集 B 中的 cols 1+2。它们是相同的,但在 B 中拆分。我也知道 B1 的长度总是 5 个字符,但我不能确定 B2将是 2 个字符。

最好不修改源文件,如何进行这样的join?

【问题讨论】:

如果这是 A = B.Col1 + B.Col2 上的 A INNER JOIN B 的标准 SQL 【参考方案1】:

您可以使用 CONCAT(b1,b2) 作为 b1_new 在关系 B 中生成一个新列,然后使用 B_New 中的新列加入 A 和新关系 B_New。假设您的文件是制表符分隔的

A = LOAD 'A.txt' USING PigStorage('\t') AS (a1:chararray,a2:int,a3:int,a4:int,a5:int);
B = LOAD 'B.txt' USING PigStorage('\t') AS (b1:chararray,b2:chararray,b3:int,b4:int,b5:int,b6:int);
B_New = FOREACH B GENERATE CONCAT(b1,b2) AS b1_new,b3,b4,b5,b6;
AB = JOIN A BY a1,B_New BY b1_new;
DUMP AB;

【讨论】:

以上是关于当键分为列时,如何在 Apache Pig 中加入两个商店?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pig 中加入 2 个不同的变量?

在 Pig 中加入两个关系并检索所需数据

在 Hadoop Pig 中加入和分组

在 Apache Pig 中加载 csv 文件时出错

如何使用 apache pig 在 hadoop 集群上加载文件?

如何使用 apache pig 递归加载文件