将ml.feature.LabeledPoint保存到本地libsvm文件

时间:2018-10-05 21:54:20

标签: scala apache-spark libsvm

(几乎是旧版)mllib LabeledPoint被保存到libsvm文件,如下所示:

val rddtoprint:RDD[LabeledPoint]= ....

MLUtils.saveAsLibSVMFile(rddtoprint, s"$newPath${File.separator}${fileName }")

ml.feature.LabeledPoint的等效方法是什么?

2 个答案:

答案 0 :(得分:1)

至少在Spark 2.2之前,MLUtils中就有一个辅助方法。

https://spark.apache.org/docs/2.0.0/api/java/index.html?org/apache/spark/mllib/util/MLUtils.html

答案 1 :(得分:0)

好的,所以有两个选项。 1.自己动手做。生成为字符串并使用标准文件IO保存

  def libSVMFileAsString():String= {

    val sparse0=internalCheckColumnOrder()

    val rows:Array[String]=sparse0.lpData().map { case LabeledPoint(label, features) =>
      val sb = new StringBuilder(label.toString)
      features.foreachActive { case (i, v) =>
        sb += ' '
        sb ++= s"${i + 1}:$v"
      }
      sb.mkString
    }.collect()

    val sbOut:mutable.StringBuilder=new mutable.StringBuilder()
    rows.foreach(r=>sbOut.append(r + "\n"))
    sbOut.toString()
  }
  1. 转换为数据框,然后保存:

    def labeledPintsAsDataFrame(): DataFrame =
    {
       lpData:RDD[LabeledPoint]=...
       val sqlContext = spark.sqlContext
       import sqlContext.implicits._
       lpData().toDF
    }
    

然后

dftoprint.write.format("libsvm").save(s"$newPath${File.separator}${fileName}")