scala - Cómo crear un Dataset Spark desde un RDD
apache-spark apache-spark-dataset (1)
Aquí hay una respuesta que atraviesa un paso adicional: el DataFrame
. Usamos SQLContext
para crear un DataFrame
y luego creamos un DataSet
usando el tipo de objeto deseado, en este caso un LabeledPoint
:
val sqlContext = new SQLContext(sc)
val pointsTrainDf = sqlContext.createDataFrame(training)
val pointsTrainDs = pointsTrainDf.as[LabeledPoint]
Actualización ¿Has oído hablar de SparkSession
? (tampoco yo hasta ahora ...)
Aparentemente, SparkSession
es la forma preferida (TM) en Spark 2.0.0 y sigue adelante. Aquí está el código actualizado para el nuevo orden mundial (chispa):
Spark 2.0.0+ se acerca
Tenga en cuenta que en los dos enfoques siguientes (uno más simple, credit @ zero323), hemos logrado ahorros importantes en comparación con el enfoque de SQLContext
: ya no es necesario crear primero un DataFrame
.
val sparkSession = SparkSession.builder().getOrCreate()
val pointsTrainDf = sparkSession.createDataset(training)
val model = new LogisticRegression()
.train(pointsTrainDs.as[LabeledPoint])
Segunda forma para Spark 2.0.0+ Crédito a @ zero323
val spark: org.apache.spark.sql.SparkSession = ???
import spark.implicits._
val trainDs = training.toDS()
Tradicional Spark 1.X y enfoque anterior
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()**
Vea también: ¿Cómo almacenar objetos personalizados en Dataset? por el estimado @ zero323.
Tengo un RDD[LabeledPoint]
destinado a ser utilizado dentro de una tubería de aprendizaje automático. ¿Cómo convertimos ese RDD
a un DataSet
? Tenga en cuenta que las nuevas spark.ml
requieren entradas en el formato del Dataset
.