【发布时间】:2019-04-17 18:25:41
【问题描述】:
我需要一些有关 Hadoop 中 Mapreduce 作业的帮助。 我有以下问题。我有一个包含多个文档+文档类别的大型数据集。我需要计算每个类别文档中每个术语的卡方值。这意味着,我需要每个类别每个术语的出现次数 + 每个类别的文档数量。
我的方法是使用 Mapreduce 作业来计算每个类别中每个单词的出现次数:
输入映射器:(docId, TextOfDocument) -> ({term, category}, docID) 减速器:(术语,{category,NumberOfOccurences})
这样做的问题是,我丢失了每个类别的文档数量信息,我在下一份工作中需要这些信息来计算卡方值。
我想到了以下解决方案:
1) 在读取文档时,使用每个类别的计数器来存储每个类别的文档数量。我认为这将是最好和最简单的解决方案。问题是,我不知道类别的数量,因此我需要动态增加计数器的数量。我没有找到在 Hadoop 中执行此操作的方法(创建动态增加的计数器)?有没有办法,我该怎么做?
2) 首先,运行一个作业并计算每个类别的文档数量并以某种方式存储它。我不知道如何检索数据或存储以某种方式方便我在阅读整个文档时可以阅读。
3) 以某种方式使用数据类型的额外值对其进行分区并以某种方式对其进行计数。
谁能帮我解决这个问题?哪种方法最好?还是有其他方法? 感谢您的帮助!
【问题讨论】:
-
如果我是你,我会使用 spark 而不是 hadoop 来完成这项工作。那是因为您可以一次将数据加载到 RDD 中,然后运行多个映射和/或顺序映射并对其进行归约。我正在考虑为您在循环工作中解决上述问题找到解决方案。我希望能找到一个;)
标签: java hadoop mapreduce bigdata counter