Ich habe eine RDD[LabeledPoint]
, die in einer maschinellen Lern-Pipeline verwendet werden soll. Wie konvertieren wir das in ein DataSet
? Beachten Sie, dass die neueren spark.ml
Apis Eingaben im Format Dataset
erfordern.So erstellen Sie ein Spark-Dataset von einer RDD
Antwort
Hier ist eine Antwort, die einen zusätzlichen Schritt durchläuft - die DataFrame
. Wir verwenden die SQLContext
einen DataFrame
zu erstellen und dann eine DataSet
mit dem gewünschten Objekttyp erstellen - in diesem Fall ein LabeledPoint
:
val sqlContext = new SQLContext(sc)
val pointsTrainDf = sqlContext.createDataFrame(training)
val pointsTrainDs = pointsTrainDf.as[LabeledPoint]
-Update Schon mal was von einem SparkSession
gehört? (Weder hatte ich bis jetzt ..)
Also scheinbar ist die SparkSession
die bevorzugte Weg (TM) in Spark 2.0.0 und voran. Hier ist die aktualisierte Code für die neue (Funke) Weltordnung:
Funken 2.0.0+
Hinweis in den beiden folgenden Ansätze Ansätze (einfacher von denen Kredit @ zero323) wir erreicht haben ein wichtige Einsparungen gegenüber dem SQLContext
Ansatz: es ist nicht mehr notwendig, zuerst eine DataFrame
zu erstellen.
val sparkSession = SparkSession.builder().getOrCreate()
val pointsTrainDf = sparkSession.createDataset(training)
val model = new LogisticRegression()
.train(pointsTrainDs.as[LabeledPoint])
Zweiter Weg für Spark 2.0.0+ Credit @ zero323
val spark: org.apache.spark.sql.SparkSession = ???
import spark.implicits._
val trainDs = training.toDS()
Traditionelle Funken 1.x und früheren Ansatz
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()**
Siehe auch: How to store custom objects in Dataset? durch das geschätzte @ zero323.
Wie wäre es mit 'training.toDS'? – zero323
@ zero323 ah, ich sehe, dass ich 'sqlContext._' importieren muss.Updating die Antwort. – javadba
@ zero323 Sie haben genügend Informationen hinzugefügt - fühlen Sie sich frei, Ihre eigene Antwort hinzuzufügen – javadba