我想使用Spark ML执行KMeans。输入是libsvm数据集:
val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate()
// Start time
//val intial_Data=spark.read.option("header",true).csv("C://sample_lda_data.txt")
val dataset = spark.read.format("libsvm").load("C:\\spark\\data\\mllib\\sample_kmeans_data.txt")
// Trains a k-means model.
val kmeans = new KMeans().setK(2).setSeed(1L)
val model = kmeans.fit(dataset)
// Evaluate clustering by computing Within Set Sum of Squared Errors.
val WSSSE = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $WSSSE")
// Shows the result.
println("Cluster Centers: ")
model.clusterCenters.foreach(println)因此,我想使用csv文件并通过Spark ML应用KMeans。我这样做了:
val intial_Data=spark.read.option("header",true).csv("C://sample_lda_data.txt")
val arrayCol= array(inputData.columns.drop(1).map(col).map(_.cast(DoubleType)): _*)
import spark.implicits._
// select array column and first column, and map into LabeledPoints
val result = inputData.select(col("col1").cast(DoubleType), arrayCol).map(r => LabeledPoint(r.getAs[Double](0),Vectors.dense(r.getAs[WrappedArray[Double]](1).toArray)))
// Trains a k-means model
val kmeans = new KMeans().setK(2)
val model = kmeans.fit(result)
// Evaluate clustering by computing Within Set Sum of Squared Errors.
val WSSSE = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $WSSSE")
// Shows the result.
println("Cluster Centers: ")
model.clusterCenters.foreach(println)我尝试将csv文件转换为Dataset[LabledPoint]。
我的转换正确吗?
发布于 2017-10-27 19:49:47
在spark 2中,我们使用的是ML包而不是MLlib。在流水线模型中工作的数据集和ML流。你需要做的是创建一个数据集,并创建两列特征,标签。特征是需要输入到算法中的特征的向量。另一个列标签是目标列。要制作特征列,你只需要使用向量汇编程序来组装你想要使用的所有特征。如果您有一个目标列,则将其重命名为label。在将这个数据集拟合到算法中之后,你将得到你的模型。
https://stackoverflow.com/questions/41718355
复制相似问题