Java Hadoop MapReduce中数值数据集的分块
我能够使用Hadoop MapReduce在数据挖掘中执行一些预处理步骤。 其中之一就是正常化。 说 进入 像wise一样,我能够对数字数据进行装箱,比如iris.csv 我算出了它背后的数学 虹膜数据集:Java Hadoop MapReduce中数值数据集的分块,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我能够使用Hadoop MapReduce在数据挖掘中执行一些预处理步骤。 其中之一就是正常化。 说 进入 像wise一样,我能够对数字数据进行装箱,比如iris.csv 我算出了它背后的数学 虹膜数据集: 找出每个属性的最小值和最大值 在数据集中 萼片长|萼片宽|花瓣长|花瓣宽 最低4.3 | 2.0 | 1.0 | 0.1 最高7.9 | 4.4 | 6.9 | 2.5 然后,我们应该将每个属性的数据值划分为“n”个存储桶。 比如说,n=5 Bucket Width= (Max - Min)
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提供max和min值,而不是依赖reducer来为您完成工作。我猜这就是你的麻烦开始的地方 不过,您可以做一件事,在mapper combiner中调用MapReduce设计模式。当每个映射器完成其工作后,它将调用一个名为
cleanup
的方法。可以实现“清理”方法,以便它获取每个贴图节点的每个属性的最大值和最小值。这样,您只给reducer(只有一个reducer)一个值为X的集合,即集群中映射器的数量X
然后,reducer获取每个属性的max和min值,因为这是一个非常短的集合,所以不会有任何问题。最后,将每个属性划分为“n”个存储桶
网络上有大量关于这种模式的信息,例如。希望能有帮助
编辑:您需要在映射器中创建一个实例变量,将每个值存储在map
方法中,这样它们就可以在cleanup
方法中使用,因为它只被调用一次。例如,HashMap
就可以了。您需要记住,您不能在map
方法中保存上下文
变量中的值,您需要在迭代HashMap
并找出每列的最大值和最小值后,在cleanup
方法中执行此操作。然后,对于键,我认为它在这种情况下并不重要,所以是的,您可以使用csv头,至于正确的值,您需要存储整个列
一旦reducer接收到来自映射器的输出,您就不能计算桶了。请记住,每个映射器将收到一个“列”,因此如果有20个映射器,则每个属性将收到20个最大值和20个最小值。因此,您需要再次计算最大值和最小值,就像您在映射器的清理
方法中所做的那样,完成后,您可以最终计算桶
您可能想知道“如果我仍然需要在reducer中找到max和min值,那么我可以省略
cleanup
方法,在reducer中执行所有操作,毕竟代码或多或少是相同的”。但是,要执行您要求的操作,您只能使用一个减速器,因此如果您省略cleanup
方法并将所有工作留给减速器,吞吐量将与在没有Hadoop的情况下在一台机器上工作一样。感谢Balduz的回答。是的,你理解了我的问题。我从你的回答中理解的是..如果我错了,请纠正我。为了在MapReduce中进行装箱,我们需要在cleanup()中找到最小值和最大值,并让mapper()通过最小值,减速器的最大值。然后让减速器计算铲斗。因此,如果我们在cleanup()中计算最小值和最大值。映射器将负责收集所有属性val,对吗?那么映射器将发出什么(键可能是csv头,值将是整个列)。因此reducer从cleanup接收数据?对吗?请参阅我的编辑,我试图在评论中回答,但太长了。谢谢Balduz。我将尝试:)。如果我有任何疑问,请更新:)如果它解决了您的问题,请接受我的回答:)每次调用映射器的map
方法时,都会向其传递一行新的csv。在这个方法中,您需要在hashmap中存储给定行的每一列的值。一旦映射器到达cleanup
方法,它将拥有一个hashmap,其中包含映射器传递的csv的所有行。我不知道我刚才说的是否可以理解。。。
100 1
100 2
100 3
101 2
101 3
101 4
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