我们可以在一个地图函数中生成2对(键,值)吗?如果有,怎么样?

时间:2016-01-29 05:05:34

标签: hadoop mapreduce

我有一个userID数据集和一个与每个UserID相关的帖子。 我想计算每个用户的帖子数量。我还希望将每个用户ID的所有帖子放在一起(将所有帖子连接在一起)。

有任何建议如何去做?

2 个答案:

答案 0 :(得分:1)

恕我直言,你可以拥有一台映射器和一台减速器。

映射器:

  1. 类PostMapper扩展了Mapper<对象,文字,文字,文字>
  2. map()可以写一个用户ID(文本)的键和一个上下文的Post(Text)值。
  3. 减速机:

    1. 类PostReducer扩展了Reducer<文字,文字,文字,文字>

    2. reduce()可以有一个可迭代的循环,其中(i)一个计数器 对于每个提取的帖子和(ii)可以使用Text变量 使用合适的分隔符连接每个提取的Post。

    3. 完成循环后,键/ UserID和值/ 连接文本可以写入reducer的上下文。

    4. 作业成功运行后,生成的文件将包含UserID和连接的帖子,用标签分隔。

      注意:在连接之前删除帖子中的所有制表符。如果您希望计数也在输出中,请在计数前加上一个选项卡,并在其中附加连续的帖子。

答案 1 :(得分:0)

键/值对中的键是userId。该值将是字符串列表(消息)。大多数列表都有count属性。

您正在寻找的信息可以通过以下方式访问:

var userId = 39;
获取用户39的第一条消息:userMessages [userId] [0] 获取用户39发布的消息数:userMessages [userId] .Count()