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
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.
E a proposito di 'training.toDS'? – zero323
@ zero323 ah, vedo che devo "importare sqlContext._". Aggiornare la risposta. – javadba
@ zero323 Hai aggiunto informazioni sufficienti - sentiti libero di aggiungere la tua risposta – javadba