【发布时间】:2017-04-09 19:52:27
【问题描述】:
在DataFrame 上使用select 来获取我们需要的信息和为同一目的映射底层RDD 的每一行之间有什么“机械”区别吗?
我所说的“机械”是指执行操作的机制。换句话说,实现细节。
提供的两个中哪一个更好/性能更高?
df = # create dataframe ...
df.select("col1", "col2", ...)
或
df = # create dataframe ...
df.rdd.map(lambda row: (row[0], row[1], ...))
我正在进行性能测试,因此我将找出哪个更快,但我想知道实现差异和优缺点。
【问题讨论】:
-
总之,
dataframe的操作总是比rdd的操作快。 -
@mtoto 我不会这么肯定。数据集必须对数据进行序列化和反序列化,以便在类型化操作中处理 + Scala 代码,而 UDF 可能会使优化消失(这对于 RDD 来说不会像“危险”那样)。
-
@JacekLaskowski Datasets 中的坏代码可能比 RDDs 中的好代码慢 ;) 但是更多时候 Dataset 将比普通 RDD 快。请注意 Spark、ML 和 Streaming 中的新 API 将以数据集为中心
标签: performance apache-spark dataframe apache-spark-sql rdd