Hadoop 我们能在一个映射函数中生成2对(键、值)吗?如果是,怎么做?

Hadoop 我们能在一个映射函数中生成2对(键、值)吗?如果是,怎么做?,hadoop,mapreduce,Hadoop,Mapreduce,我有一个userID数据集和一篇与每个userID相关的文章。 我想统计每个用户的帖子数量。我还想把每个userID的所有帖子放在一起(将所有帖子分开) 有什么建议吗?您在密钥/值对中的密钥将是用户ID。该值将是字符串(消息)的列表。大多数列表都有count属性 您要查找的信息的访问方式如下: var-userId=39 获取用户39的第一条消息:userMessages[userId][0]。 获取用户发布的邮件数39:userMessages[userId].Count()IMHO,您可以使

我有一个userID数据集和一篇与每个userID相关的文章。 我想统计每个用户的帖子数量。我还想把每个userID的所有帖子放在一起(将所有帖子分开)


有什么建议吗?

您在密钥/值对中的密钥将是用户ID。该值将是字符串(消息)的列表。大多数列表都有count属性

您要查找的信息的访问方式如下:

var-userId=39
获取用户39的第一条消息:userMessages[userId][0]。

获取用户发布的邮件数39:userMessages[userId].Count()

IMHO,您可以使用映射器和还原器

制图员:

  • 类PostMapper扩展映射器
  • map()可以将一个键(即用户ID(文本))和一个值(即Post(文本))写入上下文
  • 减速器:

  • 类PostReducer扩展了Reducer

  • reduce()可以有一个iterable循环,其中(i)有一个计数的计数器 对于每个获取的帖子和(ii)可以使用一个文本变量 用合适的分隔符连接每个获取的帖子

  • 完成循环后,键/用户ID和值/值
    连接的文本可以写入reducer的上下文

  • 作业成功运行后,生成的文件将包含UserID和连接的帖子,并由一个选项卡分隔


    注意:在连接之前,请删除文章中的所有制表符。如果您希望计数也出现在输出中,请在计数前加上制表符,并在其后面加上连接的贴子。

    是的,我很清楚键应该是什么。我理解该值可以是字符串,即post。但是,我应该设置什么值来计算用户的帖子数量?当您将消息添加到值中包含的列表中时,它将通过列表上的count属性返回消息数量。如果我知道你使用的语言,我可以说得更具体一些。例如,在C#中,您可以创建如下对象:userMessages[userId]=newlist();将添加一条新消息,如下所示:userMessags[userId].Add(message);更简单地说,在键/值对中,“值”通常可以是您想要的任何类型。它可以是另一张地图。它可以是一个列表。它可以是您定义的对象列表。感谢E Lewis提供的宝贵建议。我相信这个值甚至可以是一个数据结构,比如一个对象。我说得对吗?