如何将 kmeans 应用于镶木地板文件?

How to apply kmeans for parquet file?

我想为我的实木复合地板应用 k-means file.but 出现错误。

已编辑

java.lang.ArrayIndexOutOfBoundsException: 2

代码

val Data = sqlContext.read.parquet("/usr/local/spark/dataset/norm")
val parsedData = Data.rdd.map(s => Vectors.dense(s.getDouble(1),s.getDouble(2))).cache()

import org.apache.spark.mllib.clustering.KMeans 
val numClusters = 30
val numIteration = 1
 val userClusterModel = KMeans.train(parsedData, numClusters, numIteration)
val userfeature1 = parsedData.first 
val userCost = userClusterModel.computeCost(parsedData)
println("WSSSE for users: " + userCost)

如何解决这个错误?

我相信您正在使用 https://spark.apache.org/docs/latest/mllib-clustering.html#k-means 作为构建 K-Means 模型的参考。

在例子中

val data = sc.textFile("data/mllib/kmeans_data.txt")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

dataorg.apache.spark.rdd.RDD 类型 在你的例子中 sqlContext.read.parquetDataFrame 类型。因此,您必须将数据帧转换为 RDD 才能执行拆分操作

要从 Dataframe 转换为 RDD,您可以使用以下示例作为参考

val rows: RDD[Row] = df.rdd
    val parsedData = Data.rdd.map(s => Vectors.dense(s.getInt(0),s.getDouble(1))).cache()