java - Hadoop MapReduce 中数值数据集的分箱

标签 java hadoop mapreduce

我能够使用 Hadoop MapReduce 在数据挖掘中执行一些预处理步骤。 其中之一就是规范化。 说

100,1:2:3
101,2:3:4

进入

100 1
100 2
100 3
101 2
101 3
101 4

我能像 iris.csv 一样对数字数据进行装箱吗?

我算出了它背后的数学原理

虹膜数据集:http://archive.ics.uci.edu/ml/datasets/Iris

  1. 找出每个属性的最小值和最大值 在数据集中。

    萼片长度|萼片宽度|花瓣长度|花瓣宽度

    分钟 | 4.3| 2.0 | 1.0| 0.1

    最大 | 7.9 | 4.4 |6.9 | 2.5

然后,我们应该将每个属性的数据值分成“n”个桶。 比如说,n=5。

Bucket Width= (Max - Min) /n


Sepal Length= (7.9-4.3)/5= 0.72
So, the intervals will be as follows :
4.3 -   5.02 
5.02 - 5.74
Likewise,
5.74 -6.46
6.46 - 7.18
7.18- 7.9

继续所有属性

我们能在 Mapreduce 中做同样的事情吗? 请建议。

最佳答案

我不确定我是否理解你的问题,但你想要做的是获得该数据集的每个属性的最大值和最小值,然后将它们划分,所有这些都在同一个工作中,对吧?好的,为了划分属性,您需要向 reducer 提供最大值和最小值,而不是依赖 reducer 为您完成工作。我猜这就是您的麻烦开始的地方。

但是,您可以做一件事,即称为映射器内组合器的 MapReduce 设计模式。当每个映射器完成其工作时,它会调用一个名为 cleanup 的方法。您可以实现清理方法,以便它获取每个 map 节点的每个属性的最大值和最小值。这样,您只为 reducer (只有一个 reducer )提供了一个具有 X 值的集合,即集群中映射器的数量 X。

然后,reducer 获取每个属性的最大值和最小值,因为这将是一个非常短的集合,所以不会有任何问题。最后,您将每个属性划分到“n”个桶中。

网络上有大量关于此模式的信息,例如this tutorial。 .希望对您有所帮助。

编辑:您需要在映射器中创建一个实例变量,您将在其中存储 map 方法中的每个值,以便它们在cleanup 方法,因为它只被调用一次。例如 HashMap 就可以了。您需要记住,您不能在 map 方法中将值保存在 context 变量中,您需要在 cleanup 方法中执行此操作,在遍历 HashMap 并找出每一列的最大值和最小值之后。然后,至于 key ,我认为在这种情况下它并不重要,所以是的,您可以使用 csv header ,至于您正确的值,您需要存储整列。

一旦 reducer 收到映射器的输出,您还不能计算桶。请记住,您将收到每个映射器的一个“列”,因此如果您有 20 个映射器,您将收到每个属性的 20 个最大值和 20 个最小值。因此,您需要再次计算最大值和最小值,就像您在映射器的 cleanup 方法中所做的那样,一旦完成,您就可以最终计算桶。

您可能想知道“如果我仍然需要在 reducer 中找到最大值和最小值,那么我可以省略 cleanup 方法并在 reducer 中执行所有操作,毕竟所有代码都是或多或少相同”。但是,要执行您的要求,您只能使用一个 reducer ,因此如果您省略 cleanup 方法并将所有工作留给 reducer ,则吞吐量与在一台没有 Hadoop 的机器。

关于java - Hadoop MapReduce 中数值数据集的分箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21554529/

相关文章:

java - 在我的 Map-Reduce 作业中包含第三方库(使用分布式缓存)

java - 使用java进行for循环时间转换

hadoop - webhdfs 总是重定向到本地主机 :50075

java - 不考虑 Mapper 和 Reducer 接口(interface)

hadoop - 如何在单个 MapReduce 作业中实现多个 reducer

hadoop - Hadoop分布式模式

java - S3上传String的用户元数据列表

java - 如何在netbeans中创建这样的Java gui应用程序

java - 应该在pom文件中添加哪个依赖项来导入org.apache.tiles.controller?

mongodb - 日志查看实用程序数据库选择