私はPySparkでk-means法がどのように機能するかを理解したいと思います。このため が、私はこの小さな例やった:一見Pysparkでkmeansを使用して予測されたクラスタを元の観測で正しくラベル付けするにはどうすればよいですか?
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)? – desertnaut