提问者:小点点

将数据帧转换为k均值的Vector.密度


以下是这个问题的答案:如何将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 "]]))


共1个答案

匿名用户

您导入了不正确的库,您应该使用< code>ml中的< code>KMeans而不是< code>mllib。第一个使用< code >数据帧,第二个使用< code>RDD。