【问题标题】:Save ml.feature.LabeledPoint to local libsvm file将 ml.feature.LabeledPoint 保存到本地 libsvm 文件
【发布时间】:2019-03-11 10:32:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: scala apache-spark libsvm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      好的,所以有两个选项。 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. 转成dataframe然后保存:

        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}")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        • 2021-03-19
        相关资源
        最近更新 更多