hadoopmapreduce中数值数据集的java装箱

btxsgosb  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我能够使用hadoopmapreduce在数据挖掘中执行一些预处理步骤。其中之一就是正常化。说

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

进入

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

像wise一样,我可以对一个数字数据进行装箱,比如iris.csv。
我算出了它背后的数学
虹膜数据集:http://archive.ics.uci.edu/ml/datasets/iris
找出数据集中每个属性的最小值和最大值。
萼片长|萼片宽|花瓣长|花瓣宽
最小值4.3 2.0 1.0 0.1
最大值| 7.9 | 4.4 | 6.9 | 2.5
然后,我们应该将每个属性的数据值划分为n个bucket。假设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中也能做到这一点吗。请建议。

pw9qyyiw

pw9qyyiw1#

我不确定我是否理解你的问题,但是你想做的是得到数据集的每个属性的最大值和最小值,然后将它们分开,所有的都在同一个工作中,对吗?好的,为了划分属性,您需要为reducer提供max和min值,而不是依赖reducer来为您完成工作。我猜你的麻烦就从这里开始。
然而,有一件事你可以做,一个mapreduce设计模式称为MapperCombiner。当每个Map器完成其工作后,它将调用一个名为 cleanup . 可以实现cleanup方法,以便它获取每个贴图节点的每个属性的最大值和最小值。这样,您只给reducer(只有一个reducer)一个具有x值的集合,即x是集群中Map器的数量。
然后,reducer获取每个属性的最大值和最小值,因为这是一个非常短的集合,所以不会有任何问题。最后,将每个属性划分为n个bucket。
网上有很多关于这种模式的信息,本教程就是一个例子。希望有帮助。
编辑:您需要在Map器中创建一个示例变量,在其中存储 map 方法,以便在 cleanup 方法,因为它只被调用一次。一 HashMap 举个例子就行了。您需要记住,不能将值保存在 context 中的变量 map 方法,您需要在 cleanup 方法,在遍历 HashMap 找出每列的最大值和最小值。然后,关于键,我认为在这种情况下它并不重要,所以是的,您可以使用csv头,至于您正确的值,您需要存储整个列。
一旦reducer接收到来自Map器的输出,就不能计算bucket了。请记住,每个Map器将收到一个“列”,因此如果有20个Map器,则每个属性将收到20个最大值和20个最小值。因此,需要再次计算最大值和最小值,就像在 cleanup 方法,一旦完成了这一步,就可以最终计算桶了。
您可能想知道“如果我仍然需要在减速机中找到最大值和最小值,那么我可以忽略 cleanup 方法和做减速机里的每件事,毕竟代码会或多或少的相同”。但是,要按要求操作,只能使用一个减速机,因此如果忽略 cleanup 方法并将所有工作交给减速机,吞吐量将与在没有hadoop的情况下在一台机器上工作一样。

相关问题