回答这个问题 How to convert type Row into Vector to feed to the KMeans
我为我的数据创建了功能表。(assembler
是一个矢量汇编程序)
val kmeanInput = assembler.transform(table1).select("features")
当我使用kmeanInput
val clusters = KMeans.train(kmeanInput, numCluster, numIteration)
我收到错误
:102:错误:类型不匹配;发现:org.apache.spark.sql.DataFrame(扩展为)org.apache.spark.sql.Dataset [org.apache.spark.sql.Row]必需:org.apache.spark.rdd.RDD [org。 apache.spark.mllib.linalg.Vector] val clusters = KMeans.train(kmeanInput,numCluster,numIteration)
正如@Jed在他的回答中提到的,这是因为行不是Vectors.dense
格式。
为了解决这个问题,我尝试了
val dat = kmeanInput.rdd.map(lambda row: Vectors.dense([x for x in
row["features"]]))
我收到此错误
:3:错误:')'预期但是'('找到.val dat = kmeanInput.rdd.map(lambda row:Vectors.dense([x for x in row [“features”])))
:3:错误:';'预期,但')'发现。 val dat = kmeanInput.rdd.map(lambda row:Vectors.dense([x for x in row [“features”]]))
答案 0 :(得分:0)
您导入了错误的库,您应该使用KMeans
中的ml
而不是mllib
。第一个使用DataFrame
,第二个使用RDD
。