首页 > 解决方案 > 如何将kmeans应用于镶木地板文件?

问题描述

镶木地板文件

我想为我的镶木地板文件应用 k-means。但出现错误。

已编辑

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)

如何解决这个错误?

标签: scalaapache-sparkk-means

解决方案


我相信您正在使用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()

data是类型org.apache.spark.rdd.RDD在你的情况下sqlContext.read.parquet是类型DataFrame。因此,您必须将数据帧转换为 RDD 才能执行拆分操作

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

val rows: RDD[Row] = df.rdd

推荐阅读