代码之家  ›  专栏  ›  技术社区  ›  Jake

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

  •  0
  • Jake  · 技术社区  · 6 年前

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

    val rddtoprint:RDD[LabeledPoint]= ....
    
    MLUtils.saveAsLibSVMFile(rddtoprint, s"$newPath${File.separator}${fileName }")
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lukas Bradley    5 年前
        2
  •  0
  •   Jake    6 年前

    好的,有两种选择。 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}")
    
    推荐文章