Apache Spark k-means集群Scala中的数据格式

时间:2015-07-03 13:37:15

标签: scala apache-spark k-means rdd

我希望将k-mean聚类应用于我的数据,这些数据是在Scala中以sqlContext.sql()查询生成的DataFrame格式。我可以使用“.rdd”将其转换为RDD。

正如我从Spark的网站上的文档和单个示例中所理解的那样,KMeans.train期望RDD向量。

我的数据包含两个字段useridavg。我想要的是根据它们在Double类型中的相关userid值来聚类avg

目前我有:

val queryResult = sqlContext.sql(s"some-query") //  | userid(String) | avg(Double) |
val trainData = queryResult.rdd
val clusters = KMeans.train(trainData, numClusters, numIterations)

导致此错误:

<console>:46: error: type mismatch;
found   : org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
required: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]

这个例子暗示了这样的做法:

val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

但我无法弄清楚如何将其更改为包含avg数据的RDD向量,并以某种方式映射到userid

如何格式化输入数据以使k-mean群集按预期运行?

0 个答案:

没有答案