機械学習パイプライン内で使用するためのRDD[LabeledPoint]
があります。 RDD
をDataSet
に変換するにはどうすればよいですか?新しいspark.ml
APIにはDataset
形式の入力が必要です。
余分なステップ-DataFrame
を通過する回答を次に示します。 SQLContext
を使用してDataFrame
を作成し、目的のオブジェクトタイプ(この場合はDataSet
)を使用してLabeledPoint
を作成します。
val sqlContext = new SQLContext(sc)
val pointsTrainDf = sqlContext.createDataFrame(training)
val pointsTrainDs = pointsTrainDf.as[LabeledPoint]
UpdateSparkSession
を聞いたことがありますか? (これまで私もいなかった..)
したがって、明らかにSparkSession
は、Preferred Way(TM)Spark 2.0.0であり、前進している。新しい(スパーク)世界秩序のコード:
Spark 2.0.0+アプローチ
以下の両方のアプローチ(@ 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 +Credit to @ zero323
val spark: org.Apache.spark.sql.SparkSession = ???
import spark.implicits._
val trainDs = training.toDS()
従来のSpark 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()**
参照: カスタムオブジェクトをデータセットに保存する方法 評価の高い@ zero323による。