2016-05-29 45 views
12

Ho un RDD[LabeledPoint] destinato a essere utilizzato all'interno di una pipeline di apprendimento automatico. Come convertire tale RDD in un DataSet? Nota le nuove apis spark.ml richiedono input nel formato Dataset.Come creare un set di dati Spark da un RDD

risposta

14

Ecco una risposta che attraversa un passaggio aggiuntivo: DataFrame. Usiamo il SQLContext per creare un DataFrame e quindi creare un DataSet utilizzando il tipo di oggetto desiderato - in questo caso un LabeledPoint:

val sqlContext = new SQLContext(sc) 
val pointsTrainDf = sqlContext.createDataFrame(training) 
val pointsTrainDs = pointsTrainDf.as[LabeledPoint] 

Aggiornamento Mai sentito parlare di un SparkSession? (neanch'io fino ad ora ..)

Quindi apparentemente il SparkSession è il modo preferito (TM) in Spark 2.0.0 e andare avanti. Ecco il codice aggiornato per il nuovo (scintilla) ordine mondiale:

Spark 2.0.0+ avvicina

Avviso in entrambi gli approcci di seguito (più semplice di cui uno di credito @ zero323) abbiamo realizzato un risparmi importanti rispetto all'approccio SQLContext: non è più necessario creare prima un DataFrame.

val sparkSession = SparkSession.builder().getOrCreate() 
val pointsTrainDf = sparkSession.createDataset(training) 
val model = new LogisticRegression() 
    .train(pointsTrainDs.as[LabeledPoint]) 

Secondo modo per Spark 2.0.0+ credito a @ zero323

val spark: org.apache.spark.sql.SparkSession = ??? 
import spark.implicits._ 

val trainDs = training.toDS() 

1.X tradizionale Spark e l'approccio precedente

val sqlContext = new SQLContext(sc) // Note this is *deprecated* in 2.0.0 
import sqlContext.implicits._ 
val training = splits(0).cache() 
val test = splits(1) 
val trainDs = training**.toDS()** 

Vedi anche: How to store custom objects in Dataset? da lo stimato @ zero323.

+0

E a proposito di 'training.toDS'? – zero323

+0

@ zero323 ah, vedo che devo "importare sqlContext._". Aggiornare la risposta. – javadba

+0

@ zero323 Hai aggiunto informazioni sufficienti - sentiti libero di aggiungere la tua risposta – javadba

Problemi correlati