Spark 2.0 - 如何获取与集群中心关联的集群 ID

Posted

技术标签:

【中文标题】Spark 2.0 - 如何获取与集群中心关联的集群 ID【英文标题】:Spark 2.0 - How to obtain Cluster ID associated with Cluster Center 【发布时间】:2018-04-24 03:36:18 【问题描述】:

我想知道与集群中心关联的 ID 是什么。 model.transform(dataset) 将为我的数据点分配一个预测的集群 ID,model.clusterCenters.foreach(println) 将打印这些集群中心,但我无法弄清楚如何将集群中心与其 ID 相关联。

import org.apache.spark.ml.clustering.KMeans

// Loads data.
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

// Trains a k-means model.
val kmeans = new KMeans().setK(2).setSeed(1L)
val model = kmeans.fit(dataset)
val prediction = model.transform(dataset)

// Shows the result.
println("Cluster Centers: ")
model.clusterCenters.foreach(println)

理想情况下,我想要这样的输出:

|I.D     |cluster center |
==========================
|0       |[0.0,...,0.3]  |
|2       |[1.0,...,1.3]  |
|1       |[2.0,...,1.3]  |
|3       |[3.0,...,1.3]  |

在我看来,println 顺序不是按 ID 排序的。我尝试将model.clusterCenters 转换为DF 到transform(),但我不知道如何将Array[org.apache.spark.ml.linalg.Vector] 转换为org.apache.spark.sql.Dataset[_]

【问题讨论】:

【参考方案1】:

保存数据后,它将写入 cluster_id 和 Cluster_center。可以读取文件,可以看到想要的输出

    model.save(sc, "/user/hadoop/kmeanModel")
    val parq = sqlContext.read.parquet("/user/hadoop/kmeanModel/data/*")
    parq.collect.foreach(println)

【讨论】:

@BéatriceMoissinac,我们遇到了这个问题,查看了源代码并找到了它。

以上是关于Spark 2.0 - 如何获取与集群中心关联的集群 ID的主要内容,如果未能解决你的问题,请参考以下文章

Spark 2.0 作为 HortonWorks 集群中的技术预览

在仅支持 Spark 1.6 的集群上运行带有 Spark 2.0 的 Fat Jar

Hadoop与Spark的关系,Spark集群必须依赖Hadoop吗?

如何使用基本身份验证而不是 OAuth 2.0 将 Alexa 用户与 3rd 方应用程序相关联

Spark的RDD原理以及2.0特性的介绍

Spark 执行模型与性能调优,文末留言免费获取《Spark:大数据集群计算的生产实践》