【发布时间】:2018-04-23 15:03:48
【问题描述】:
我想了解 k-means 方法在 PySpark 中的工作原理。 为此,我做了这个小例子:
In [120]: entry = [ [1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[5,5,5],[5,5,5],[1,1,1],[5,5,5]]
In [121]: rdd_entry = sc.parallelize(entry)
In [122]: clusters = KMeans.train(rdd_entry, k=5, maxIterations=10, initializationMode="random")
In [123]: rdd_labels = clusters.predict(rdd_entry)
In [125]: rdd_labels.collect()
Out[125]: [3, 1, 0, 0, 2, 2, 2, 3, 2]
In [126]: entry
Out[126]:
[[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5],
[5, 5, 5],
[5, 5, 5],
[1, 1, 1],
[5, 5, 5]]
乍一看,rdd_labels 似乎返回每个观察所属的集群,尊重原始 rdd 的顺序。尽管在此示例中很明显,我如何确定在我将使用 800 万个观测值的情况下工作?
另外,我想知道如何加入 rdd_entry 和 rdd_labels,尊重该顺序,以便 rdd_entry 的每个观察都正确地用其集群标记。 我试图做一个.join(),但它跳转错误
In [127]: rdd_total = rdd_entry.join(rdd_labels)
In [128]: rdd_total.collect()
TypeError: 'int' object has no attribute '__getitem__'
【问题讨论】:
-
您是否仅限于使用
pyspark.mllib(即将被弃用),或者您可能想要基于pyspark.ml的解决方案(即首选的基于数据帧的API)?
标签: pyspark cluster-analysis apache-spark-mllib