J'ai un RDD[LabeledPoint]
destiné à être utilisé dans un pipeline d'apprentissage automatique. Comment convertir ce RDD
en DataSet
? Notez le plus récent spark.ml
les apis nécessitent des entrées au format Dataset
.
Voici une réponse qui traverse une étape supplémentaire - le DataFrame
. Nous utilisons le SQLContext
pour créer un DataFrame
puis un DataSet
en utilisant le type d'objet souhaité - dans ce cas un LabeledPoint
:
val sqlContext = new SQLContext(sc)
val pointsTrainDf = sqlContext.createDataFrame(training)
val pointsTrainDs = pointsTrainDf.as[LabeledPoint]
Mise à jour Avez-vous déjà entendu parler d'un SparkSession
? (moi non plus jusqu'à présent ..)
Donc, apparemment, le SparkSession
est le chemin préféré (TM) dans Spark 2.0.0 et aller de l'avant. Voici le code mis à jour pour le nouvel ordre mondial (étincelle):
Approches Spark 2.0.0+
Remarquez que dans les deux approches ci-dessous (une plus simple dont credit @ zero323), nous avons réalisé des économies importantes par rapport à l'approche SQLContext
: il n'est plus nécessaire de créer d'abord un DataFrame
.
val sparkSession = SparkSession.builder().getOrCreate()
val pointsTrainDf = sparkSession.createDataset(training)
val model = new LogisticRegression()
.train(pointsTrainDs.as[LabeledPoint])
Deuxième voie pour Spark 2.0.0 + Crédit à @ zero323
val spark: org.Apache.spark.sql.SparkSession = ???
import spark.implicits._
val trainDs = training.toDS()
Traditionnel Spark 1.X et approche antérieure
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()**
Voir aussi: Comment stocker des objets personnalisés dans Dataset? par le estimé @ zero323.