如何将 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()
data
是 org.apache.spark.rdd.RDD
类型 在你的例子中 sqlContext.read.parquet
是 DataFrame
类型。因此,您必须将数据帧转换为 RDD 才能执行拆分操作
要从 Dataframe 转换为 RDD,您可以使用以下示例作为参考
val rows: RDD[Row] = df.rdd
val parsedData = Data.rdd.map(s => Vectors.dense(s.getInt(0),s.getDouble(1))).cache()
我想为我的实木复合地板应用 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()
data
是 org.apache.spark.rdd.RDD
类型 在你的例子中 sqlContext.read.parquet
是 DataFrame
类型。因此,您必须将数据帧转换为 RDD 才能执行拆分操作
要从 Dataframe 转换为 RDD,您可以使用以下示例作为参考
val rows: RDD[Row] = df.rdd
val parsedData = Data.rdd.map(s => Vectors.dense(s.getInt(0),s.getDouble(1))).cache()