RDD困境
map、filter,它们都需要一个辅助函数 f 来作为形参,通过调用 map(f)、filter(f) 才能完成计算。以 map 为例,我们需要函数 f 来明确对哪些字段做映射,以什么规则映射。filter 也一样,我们需要函数 f 来指明以什么条件在哪些字段上过滤。这样一来,Spark 只知道开发者要做 map、filter,但并不知道开发者打算怎么做 map 和 filter。换句话说,对于 Spark 来说,辅助函数 f 是透明的。在 RDD 的开发框架下,Spark Core 只知道开发者要“做什么”,而不知道“怎么做”。
在 RDD 开发框架下,Spark Core 的优化空间受限。绝大多数 RDD 高阶算子所封装的封装的计算逻辑(形参函数 f)对于 Spark Core 是透明的,Spark Core 除了用闭包的方式把函数 f 分发到 Executors 以外,没什么优化余地。而这,就是 RDD 之殇
DataFrame
比 RDD,DataFrame 到底有何不同呢?我们不妨从两个方面来对比它们的不同:一个是数据的表示形式(Data Representation),另一个是开发算子。
DataFrame 与 RDD 一样,都是用来封装分布式数据集的。但在数据表示方面就不一样了,DataFrame 是携带数据模式(Data Schema