使用Apache Hadoop Pig内部连接两个数据集

时间:2015-08-31 23:17:34

标签: hadoop apache-pig

我有两个数据集(1M唯一字符串)和(1B唯一字符串);我想知道两个集合中有多少个字符串,并想知道使用Apache Pig获取数字的最有效方法是什么?

3 个答案:

答案 0 :(得分:5)

您可以先加入以下文件:

A = LOAD '/joindata1.txt' AS (a1:int,a2:int,a3:int);
B = LOAD '/joindata2.txt' AS (b1:int,b2:int);
X = JOIN A BY a1, B BY b1;  

然后你可以计算行数:

grouped_records = GROUP X ALL;
count_records = FOREACH grouped_records GENERATE COUNT(A.a1);

它对你有帮助吗......

答案 1 :(得分:1)

您的案件不属于复制或合并或倾斜加入。所以你必须做一个默认连接,其中在map阶段它注释每个记录的源,Join键将被用作shuffle键,以便相同的连接键转到同一个reducer,然后最左边的输入缓存在reducer端的内存中并传递另一个输入以进行连接。您还可以通过正常的连接优化来改进连接,例如在加入之前使用过滤器NULL,并且每个键具有最大元组数的表可以保留为查询中的最后一个表。

答案 2 :(得分:1)

如果您的数据已经在两个数据集中进行了排序,则可以定义merged join

Mergede = join A by a1, B by b1 USING "merge";

Skewed Join: If the data is skewed and user need finer control over the allocation to reducers.

skewedh = join A by a1, B by b1 USING "skewed";