Hadoop 在 Maper 或 Reducer 端使用 java 加入两个不同的数据集

Hadoop joining two different data sets using java at Maper or Reducer end

我有两个不同的数据集。

***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?

为我提供输入以以简单的方式实现此目的。我已经将有关多个数据文件的 Whosebug 问题提交给 Job,但所有这些文件的输入格式都相同。就我而言,输入格式不同。

提前致谢。

要执行 reduce side join,您可以让您的地图实现发出

(K,V) -> (JOIN_KEY,DATA).

然后在 reduce 端,您将可以访问与该键关联的所有值。例如,如果您想确保您的 Post 数据在列表中排在第一位,然后所有评论数据都在列表中,那么您可以实施二次排序。

Secondary Sort