apache-spark – Spark Mllib kmeans示例,使用数据帧而不是textFile

我正在尝试在浮点数的数据帧上运行Spark(1.3.1)Mllib k-means聚类.

我正在关注Spark提供的集群示例

https://spark.apache.org/docs/1.3.1/mllib-clustering.html

但是,我使用的是由一列双精度组成的数据帧(为简单起见),而不是文本文件.根据Mllib文档,我需要将其转换为Kmeans函数的向量.到目前为止,我有这个

    import org.apache.spark.mllib.linalg.Vectors
    val parsedData = data.map(s => Vectors.dense(s(0))).cache()

我收到错误

error: overloaded method value dense with alternatives:
(values: Array[Double])org.apache.spark.mllib.linalg.Vector and
(firstValue: Double,otherValues: Double*)org.apache.spark.mllib.linalg.Vector
cannot be applied to (Any)
val parsedData = sample2.map(s => Vectors.dense(s(1))).cache()
                                          ^

有没有更好的方法呢?

我已经阅读了这篇类似的帖子,但我发现它不够相似:
How to turn a known structured RDD to Vector
而这一个How to convert org.apache.spark.rdd.RDD[Array[Double]] to Array[Double] which is required by Spark MLlib
它处理文本数据

最佳答案 关于什么:

val parsedData = data.rdd.map(s => Vectors.dense(s.getDouble(0))).cache()

如果data是单列双精度数据帧,那么这应该有效.
如果您的数据框中有更多列,则只需添加更多内容,例如:

val parsedData = data.rdd.map(s => Vectors.dense(s.getDouble(0),s.getDouble(1))).cache()
点赞