我有两个已排序的文件,我需要使用hive或hadoop加入并通过密钥聚合。 文件A按(A.X,A.Y)排序,文件B按(B.X,B.Y)排序。我可以使用配置单元进行连接,创建中间结果,然后执行另一个查询来对值进行求和。进行此操作的最佳方法是什么?做mapreduce工作或使用配置单元?文件B比文件A小得多。我可以使用文件A和文件B的排序吗?
FILE A FILE B INTERMEDIATE_FILE FINAL_FILE
X Y Z X Y X Y Z X Y
1 V1 10 1 V1 1 V1 10 1 30 (20 + 10)
1 V1 20 2 V2 1 V1 20 2 50 (50)
1 V2 30 3 V1 2 V2 50 3 130 (60 + 70)
2 V1 40 3 V1 60
2 V2 50 3 V1 70
3 V1 60
3 V1 70
4 V1 80
由于
答案 0 :(得分:0)
您可以使用pig中的'merge'选项加入数据。
示例:
data_a = load '$input1' as (X, Y, Z);
data_b = load '$input2' as (P, Q);
join_data = join data_a by (X,Y), data_b by (P,Q) using 'merge';
在join_data关系上执行聚合逻辑。
这是排序合并连接操作。通过打开两个文件并遍历它们,可以在映射阶段完成连接。 Pig将此称为合并连接,因为它是排序合并连接,但排序已经完成。
来源:Alan Gates的编程猪。
答案 1 :(得分:0)
我创建了一个Identy Mapper Reducer作业,然后使用CompositeInputFormat执行另一个作业。在地图阶段,我使用称为“In-mapper Combiner”的模式进行了计算。所以,这个第二个工作没有减速器。我认为这是解决方案是goind线性扩展。因此,如果我将我的群集的大小增加一倍,我的工作就是在半个时间内完成。