如何从RDD创建Spark数据集

时间:2016-05-29 18:52:55

标签: scala apache-spark dataset apache-spark-dataset

我有一个RDD[LabeledPoint]打算在机器学习管道中使用。我们如何将RDD转换为DataSet?请注意,较新的spark.ml api需要Dataset格式的输入。

1 个答案:

答案 0 :(得分:18)

这是一个遍历额外步骤的答案 - DataFrame。我们使用SQLContext创建DataFrame,然后使用所需的对象类型创建DataSet - 在这种情况下为LabeledPoint

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

更新有没有听说过 SparkSession ? (直到现在我都没有。)

显然SparkSession是Spark 2.0.0中的首选方式(TM)并向前发展。以下是新(火花)世界秩序的更新代码:

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的第二种方式归功于@ 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()**

另请参阅:How to store custom objects in Dataset?由受人尊敬的@ zero323。