2014-11-09 13 views
6

Utilizzo MLlib di Apache-Spark e Scala. Ho bisogno di convertire un gruppo di vettoreConverti RDD di Vector in LabeledPoint utilizzando Scala - MLLib in Apache Spark

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

in un LabeledPoint per applicare gli algoritmi di MLLib
Ogni vettore è composto da doppio valore di 0,0 (false) o 1,0 (true). Tutti i vettori vengono salvati in un RDD, in modo che il finale RDD è di tipo

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

Così, nel RDD ci sono vettori creano con

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)   

Come posso creare da questo RDD (data_tmp) o da RowMatrix (dati) un set LabeledPoint per l'utilizzo degli algoritmi MLLib? Per esempio ho bisogno di applicare le SVM algoritmi lineari mostrano here

risposta

1

ho trovato la soluzione:

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) }  
Problemi correlati