如何从 RDD 创建 Spark 数据集
Posted
技术标签:
【中文标题】如何从 RDD 创建 Spark 数据集【英文标题】:How to create a Spark Dataset from an RDD 【发布时间】:2016-09-27 13:48:30 【问题描述】:我有一个RDD[LabeledPoint]
,打算在机器学习管道中使用。我们如何将RDD
转换为DataSet
?注意较新的spark.ml
api 需要Dataset
格式的输入。
【问题讨论】:
【参考方案1】:这是一个遍历额外步骤的答案 - 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+ 方法
请注意,与SQLContext
方法相比,在以下两种方法(其中一种更简单,其中一种归功于@zero323)中,我们已经实现了重要的节省:不再需要首先创建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。
【讨论】:
training.toDS
怎么样?
@zero323 啊,我知道我需要import sqlContext._
。更新答案。
@zero323 您已经添加了足够的信息 - 请随意添加您自己的答案
@zero323 所以你注意到了一周前的评论。我担心你把它看得太认真了;)。这是为了尊重你的知识。你也有很好的方法/态度。
我好吗?你一定把我误认为是我的好双胞胎了 :) BTW:在这里链接***.com/q/36648128/1560062 可能是个好主意。以上是关于如何从 RDD 创建 Spark 数据集的主要内容,如果未能解决你的问题,请参考以下文章