2015-08-31 37 views

回答

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); 

它是否帮助你的问题......

+0

非常有帮助。 :) –

+1

@ LinMa如果这回答了你的问题,请接受它。 – Balduz

+0

完成,哥们,谢谢。祝你有美好的一天。 :) –

1

您的情况不属于复制或合并或倾斜连接。所以你必须做一个默认连接,其中在映射阶段它注释每个记录的源,Join键将被用作shuffle键,以便相同的连接键进入相同的reducer,然后最左边的输入被缓存在reducer侧的内存中并通过其他输入进行连接。您还可以通过常规联接优化来提高联接,例如在联接之前过滤NULL,并且每个键的元组数最多的表可以保留为查询中的最后一个表。

+0

为什么在我的情况下,它不属于复制或合并或偏斜连接? –

+1

如果您必须进行复制连接,那么您的数据集中的一个必须在KB方面很小,以便它可以发送给所有任务跟踪器,并且这些数据集将被缓存在内存中,并且您的其他数据集将被传递以执行加入。但是这里没有一个数据集看起来很小。如果你有一个特定的键的多个值,那么单个reducer不能容纳更多的数据,就会使用斜连接。但是这里你的数据集包含唯一的字符串值。如果数据集已排序,则可以使用合并连接。 –

+0

什么意思是合并连接?你能分享一些关于Skewed如何加入内部工作的基础知识的文档吗? –

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"; 
+0

想知道如何扭曲工作底层到偏斜的数据情况?谢谢。 –