Apache spark 理解RDD和数据集
从数据集和RDD文档中 数据集: 数据集是特定于域的对象的强类型集合 可以使用函数或关系进行并行转换 操作。每个数据集还有一个称为DataFrame的非类型化视图, 这是行的数据集 RDD: RDD表示一个不可变的、分区的元素集合 可以并行操作 此外,据说它们之间的区别是: 主要区别在于,数据集是特定领域的集合 对象,其中as RDD是任何对象的集合。域对象部分 of definition表示数据集的模式部分。所以数据集API是 在不使用RDD的情况下,始终使用模式进行强类型和优化 我这里有两个问题Apache spark 理解RDD和数据集,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,从数据集和RDD文档中 数据集: 数据集是特定于域的对象的强类型集合 可以使用函数或关系进行并行转换 操作。每个数据集还有一个称为DataFrame的非类型化视图, 这是行的数据集 RDD: RDD表示一个不可变的、分区的元素集合 可以并行操作 此外,据说它们之间的区别是: 主要区别在于,数据集是特定领域的集合 对象,其中as RDD是任何对象的集合。域对象部分 of definition表示数据集的模式部分。所以数据集API是 在不使用RDD的情况下,始终使用模式进行强类型和优化 我这里有两个
数据集是特定于域的对象的集合,这意味着什么?给定一个案例类Person
,我认为数据集[Person]和RDD[Person]都是特定于域的对象的集合
数据集API始终是强类型的,并使用RDD不存在的模式进行优化
为什么说数据集API始终是强类型的,而RDD不存在?我认为RDD[Person]也是强类型的强类型
数据集
(不是数据帧
)是一组记录类型(Scala产品
),使用所谓的编码器
映射到内部存储格式,而RDD
可以存储任意可序列化(可序列化
或Kryo可序列化对象)。因此,作为一个容器,RDD
比Dataset
更通用
以下:
。所以数据集API总是强类型的(…),而RDD不是
这是完全荒谬的,表明你不应该相信你在互联网上能找到的一切。一般来说,Dataset
API的类型保护明显弱于RDD
。这在使用数据集[行]
时尤其明显,但适用于任何数据集
考虑以下示例:
case class FooBar(id: Int, foos: Seq[Int])
Seq[(Integer, Integer)]((1, null))
.toDF.select($"_1" as "id", array($"_2") as "foos")
.as[FooBar]
这显然破坏了类型安全。谁将我的问题标记为关闭?为什么要关门?