我有两个不同的数据集。
***Comments.csv:***
id
userid
***Posts.csv-***
id
post_type
creationdate
score
viewcount
owneruserid
title
answercount
commentcount
我有显示名称,没有。具有最高声誉的用户创建的帖子数量。
我知道Map Reduce如何使用单个文件工作的代码。我知道如何为Job设置多个文件。但是我不知道如何在Mapper级别上连接不同的数据集。
我不确定是否可以使用一个Mapper将这两个数据集结合在一起。
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
String[] data = value.toString().split(",");
// Logic to write values to context
}
MultipleInputs.addInputPath(job,new Path(args[0]),TextInputFormat.class,CommentsMapper.class);
MultipleInputs.addInputPath(job,new Path(args[1]),TextInputFormat.class,PostsMapper.class);
我的查询:
1. Map side join or Reduce side join : Which one is better?.
2. Is it possible to use single Mapper or Reducer? If yes, how is it possible?
请提供输入以简单的方式实现此目的。我经历了关于多个数据文件到Job的Stackoverflow问题,但是所有这些文件的输入格式都是相同的。就我而言,输入格式是不同的。
提前致谢。
最佳答案
要执行reduce side join,可以让 map 实现发出(K,V) -> (JOIN_KEY,DATA)
。
然后,在简化方面,您将可以访问与该键关联的所有值。例如,如果您想确保列表中的文章数据首先位于列表中,然后所有的注释数据都位于列表之后,则可以实现第二排序。
Secondary Sort