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