Kmeans Spark ML

时间:2017-01-18 11:33:07

标签: scala apache-spark apache-spark-ml

我想使用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]

我的转变是否正确?

1 个答案:

答案 0 :(得分:0)

在spark 2而不是MLlib中,我们使用ML包。哪个工作数据集和ML流在管道模型中工作。你需要做的是你必须制作一个数据集,并制作两个列功能,标签。功能是你需要输入算法的功能向量。另一列标签是目标列。要制作要素列,只需使用向量汇编程序来组合您想要使用的所有要素。如果您有目标colunm,则将其重命名为label。将此数据集拟合到算法之后,您将获得您的模型。