我有两个数据集(1M唯一字符串)和(1B唯一字符串);我想知道两个集合中有多少个字符串,并想知道使用Apache Pig获取数字的最有效方法是什么?
答案 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";