我正在尝试在Spark 2.2中运行Kmeans群集算法。我无法找到正确的输入格式。它会出现SomeBoredPseudocode(A)
if(A.size()>100)
error "oops, I don't need such a big array"
i=100;
if i==A.size()
exit
else
i=i-1
错误。我进一步检查了我的TypeError: Cannot convert type <class 'pyspark.sql.types.Row'> into Vector
是一个Row Rdd。我们将它转换为数组RDD吗?这个MLlib Doc表示我们可以将并行数组rdd数据传递给KMeans模型。
inputrdd
步骤发生错误。
KMeans.train
import pandas as pd
from pyspark.mllib.clustering import KMeans, KMeansModel
df = pd.DataFrame({"c1" : [1,2,3,4,5,6], "c2": [2,6,1,2,4,6], "c3" : [21,32,12,65,43,52]})
sdf = sqlContext.createDataFrame(df)
inputrdd = sdf.rdd
model = KMeans.train( inputrdd, 2, maxIterations=10, initializationMode="random",
seed=50, initializationSteps=5, epsilon=1e-4)
当.collect被调用时。
inputrdd
答案 0 :(得分:0)
以下更改有所帮助。我使用Vectors.dense
直接将我的Row rdd更改为Vector。
from pyspark.mllib.linalg import Vectors
inputrdd = sdf.rdd.map(lambda s : Vectors.dense(s))