从DataSet和RDD文档中
数据集:
数据集是特定于域的对象的强类型集合 可以使用函数或关系并行转换 操作。每个数据集还有一个名为DataFrame的无类型视图, 这是一个行数据集
RDD:
RDD表示一个不可变的,分区的元素集合 可以并行操作
另外,据说它们之间存在差异:
主要区别在于,数据集是特定于域的集合 RDD是任何对象集合的对象。域对象部分 定义表示数据集的模式部分。所以数据集API就是 始终使用不使用RDD的模式强类型化和优化。
我在这里有两个问题;
这是什么意思dataset is collection of domain specific objects while RDD is collection of any object
,给定案例类Person
,我认为DataSet [Person]和RDD [Person]都是域特定对象的集合
dataset API is always strongly typed and optimized using schema where RDD is not
为什么说数据集API总是强类型而RDD不是?我以为RDD [Person]也是强类型的
答案 0 :(得分:3)
强类型Dataset
(不是DataFrame
)是记录类型的集合(Scala Products
),它们使用所谓的Encoders
映射到内部存储格式,而{ {1}}可以存储任意可序列化(RDD
或Kryo可序列化对象)。因此,容器Serializable
比RDD
更通用。
下列的程序:
。因此,数据集API始终是强类型的(...),其中RDD不是。
是完全荒谬的,表明你不应该相信你在互联网上可以找到的一切。一般来说,Dataset
API的类型保护功能明显弱于Dataset
。这在工作RDD
时尤其明显,但适用于任何Dataset[Row]
。
考虑以下示例:
Dataset
明显打破了类型安全。