Как создать Spark Dataset из RDD

У меня есть RDD[LabeledPoint], предназначенный для использования в конвейере машинного обучения. Как мы преобразуем это RDD в DataSet? Обратите внимание, что новый spark.ml apis требует ввода в формате DataSet.

Ответ 1

Вот ответ, который проходит дополнительный шаг - DataFrame. Мы используем SQLContext для создания DataFrame, а затем создаем DataSet с использованием нужного типа объекта - в этом случае a LabeledPoint:

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

Обновить Когда-либо слышал о SparkSession? (и до сих пор я не был).

Таким образом, очевидно, что SparkSession является предпочтительным способом (TM) в Spark 2.0.0 и движется вперед. Вот обновленный код для нового (искрового) мирового порядка:

Подходы Spark 2.0.0+

Обратите внимание, что в обоих нижеприведенных подходах (более простой из которых credit @zero323) мы достигли важной экономии по сравнению с подходом SQLContext: больше не нужно сначала создавать DataFrame.

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

Второй способ для Spark 2.0.0 + Кредит @zero323

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

val trainDs = training.toDS()

Традиционный искры 1.X и более ранний подход

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()**

Смотрите также: Как сохранить пользовательские объекты в Dataset? по уважаемому @zero323.