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

标签 apache-spark k-means apache-spark-mllib

我正在尝试在浮点数数据帧上运行 Spark (1.3.1) Mllib k-means 聚类。
我正在关注 Spark 提供的集群示例

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

但是,我使用的是由一列 double 数组成的数据框,而不是文本文件(为简单起见)。根据 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()

如果数据是单列 double 的数据框,这应该可以工作。
如果您的数据框中有更多列,则只需添加更多获取,例如:
val parsedData = data.rdd.map(s => Vectors.dense(s.getDouble(0),s.getDouble(1))).cache()

关于apache-spark - Spark Mllib kmeans 示例,使用数据框而不是 textFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375785/

相关文章:

scala - 不止一个 Spark 上下文错误

apache-spark - Spark Streaming在减少时是否提供日期顺序的保证

scala - Spark ML - 保存 OneVsRestModel

scala - 如何从 Scala 中的 DataFrame 在 Spark 中创建分布式稀疏矩阵

apache-spark - 如何保留 Spark HashingTF() 函数的输入键或索引?

scala - Elastic Search中的文档删除需要花费时间

apache-spark - 可以使用 spark 配置来配置 Beam 可移植运行机吗?

opencv kmeans聚类错误输出

hadoop - Mahout K表示聚类输入文件格式

algorithm - 高效动态聚类