以下是这个问题的答案:如何将Row类型转换为Vector,以提供给KMean
我已经为我的数据创建了特征表。(< code>assembler是一个矢量汇编程序)
val kmeanInput = assembler.transform(table1).select("features")
当我使用kmeanInput
运行k-means时
val clusters = KMeans.train(kmeanInput, numCluster, numIteration)
我得到了错误
:102:错误:类型不匹配;找到 : org.apache.spark.sql.DataFrame (展开为) org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] required: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] val clusters = KMeans.train(kmeanInput, numCluster, numIteration)
正如@Jed在他的回答中提到的,这是因为行不是< code>Vectors.dense格式。为了解决这个问题,我尝试
val dat = kmeanInput.rdd.map(lambda row: Vectors.dense([x for x in
row["features"]]))
我得到了这个错误
: 3:错误:')'预期但'('找到.val dat=kmeanInput.rdd.map(lambda行:Vectors.密集([x for x in row["特征"]]))
:3:错误:“;”应为,但找到了“)”。val dat = kmean input . rdd . map(lambda row:vectors . dense([x for x in row[" features "]]))
您导入了不正确的库,您应该使用< code>ml中的< code>KMeans而不是< code>mllib。第一个使用< code >数据帧,第二个使用< code>RDD。