我RDD[LabeledPoint]
打算在机器学习管道中使用。我们如何将其转换RDD
为DataSet
?请注意,较新的 spark.ml
api 需要Dataset
格式中的输入。
25856 次
1 回答
21
这是一个遍历额外步骤的答案- DataFrame
. 我们使用SQLContext
来创建 a DataFrame
,然后DataSet
使用所需的对象类型创建 a ——在本例中为 a 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()**
另请参阅:如何在数据集中存储自定义对象?由受人尊敬的@zero323 提供。
于 2016-05-29T19:05:18.097 回答