Преобразование RDD вектора в LabeledPoint с помощью Scala - MLLib в Apache Spark

Я использую MLlib из Apache-Spark и Scala. Мне нужно преобразовать группу векторов

import org.apache.spark.mllib.linalg.{Vector, Vectors}    
import org.apache.spark.mllib.regression.LabeledPoint    

в LabeledPoint для применения алгоритмов MLLib
Каждый вектор состоит из значения Double, равного 0,0 (ложь) или 1,0 (истина). Все векторы сохраняются в СДР, поэтому окончательный СДР имеет тип

    val data_tmp: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]      

Итак, в RDD есть векторы, созданные с помощью

 def createArray(values: List[String]) : Vector =
    {                
        var arr : Array[Double] = new Array[Double](tags_table.size)
        tags_table.foreach(x => arr(x._2) =  if (values.contains(x._1)) 1.0 else 0.0 )
        val dv: Vector = Vectors.dense(arr)
        return dv

        }
    /*each element of result is a List[String]*/
    val data_tmp=result.map(x=> createArray(x._2)) 
    val data: RowMatrix = new RowMatrix(data_tmp)        

Как я могу создать из этого RDD (data_tmp) или из RowMatrix (data) набор LabeledPoint для использования алгоритмов MLLib? Например, мне нужно применить линейные алгоритмы SVM, показанные здесь


person Alessio Conese    schedule 09.11.2014    source источник


Ответы (1)


Я нашел решение:

    def createArray(values: List[String]) : Vector =
    {                
          var arr : Array[Double] = new Array[Double](tags_table.size)
          tags_table.foreach(x => arr(x._2) =  if (values.contains(x._1)) 1.0 else 0.0 )
          val dv: Vector = Vectors.dense(arr)
          return dv

    }
    val data_tmp=result.map(x=> createArray(x._2))       
    val parsedData = data_tmp.map { line => LabeledPoint(1.0,line) }       
person Alessio Conese    schedule 05.12.2014