2015-04-29 94 views
4

我想从apache Spark的mlib库中做一个kmeans聚类算法。我有一切设置,但我不确定如何去格式化输入数据。我对机器学习相对来说比较陌生,所以不胜感激。 在示例data.txt中的数据如下: 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 如何格式化Spark Spark kmeans聚类算法的数据?

而我要运行的算法是这种格式现在(JSON阵列)的数据:

[{"customer":"ddf6022","order_id":"20031-19958","asset_id":"dd1~33","price":300,"time":1411134115000,"location":"bt2"},{"customer":"ddf6023","order_id":"23899-23825","asset_id":"dd1~33","price":300,"time":1411954672000,"location":"bt2"}]

我怎样才能将它转换成可与k-means聚类算法一起使用的东西?我正在使用Java,我猜我需要它是JavaRDD格式,但不知道如何去做。

回答

2

这是如何工作的:

首先,你要确定你想申请KMEANS什么尺寸,包括在星火文档KMEANS例应用三维点数据集(XY & Z尺寸)。考虑到accoint上MLLib的KMEANS实现能够对集合N维的工作,其中n> = 1

建议:

因此,可以说,你的投入,XY & Z尺寸将是JSON字段:价格,时间 & 位置。那么,你所要做的就是从中提取您的数据集的大小,并把这些文本文件,如下所示:

300 1411134115000 2 
300 1411954672000 2 
... 
... 
... 

凡位置“BT2”已经由2替换(假设你的数据设置了另一个地点)。您必须为KMeans提供数值。

注意事项/意见:

为了获得更好的聚类结果,并根据数据时间分布,如果利用时间戳字段的通过将其转化为价值这将是很好:年,月,日,小时,分钟,秒等。因此,根据您的聚类目的,您可以使用不同的维度作为单独的字段。

另外,我想你想自动JSON2CSV转换过程。因此,在您的映射实施中,您可以使用类似这样的方法:https://stackoverflow.com/a/15411074/833336