首页 > 解决方案 > RDD vs DataFrame(存储数据类型)

问题描述

我正在阅读一本关于 Apache Spark 的书,在比较 RDD 和 DataFrame 时,它​​有以下内容要说:

RDD 和 DataFrame 的主要区别在于 DataFrame 存储的数据信息比 RDD 多得多,例如数据类型和列名。这允许 DataFrame 比 Spark 转换和 Spark 操作在 RDD 上进行处理更有效地优化处理。

然而,在使用 Scala 玩 RDD 时,我注意到数据类型实际上是存储的。例如:

val acTuplesByAmount = acBalTuples.map{case (amount, accno) => (amount.toDouble, accno)}
acTuplesByAmount.collect()
res5: Array[(Double, String)] = Array((50000.0,SB10001), (12000.0,SB10002), (8500.0,SB10004), (5000.0,SB10005), (3000.0,SB10003))

如您所见,它记录了我们想要一个 Double 和一个 String 的事实。在我的地图之前,我认为它可能是两个字符串。

那么这本书有错吗?或者 DataFrames 是否仍然具有更好的数据类型?

标签: apache-sparkapache-spark-sql

解决方案


在 DataFrame 中,spark 只对数据进行洗牌,因为所有执行者都知道数据模式。在 RDD 中,它们是序列化的 java 对象,洗牌成本要高得多,并且再次携带有关数据的所有信息。


推荐阅读