目录
为何使用 PySpark DataFrame
使用 pandas 进行数据处理,dataframe 常作为主力军出现。基于单机操作的 pandas dataframe 是一种表格形数据结构,拥有丰富、灵活、操作简单的 api,在数据量不大的情况下有较好的效果。
对于大数据量的运算,分布式计算能突破 pandas 的瓶颈,而 Spark 则是分布式计算的典型代表。 Spark 中有三类数据 api,RDD、DataFrame 和 Datasets(支持多种主流语言操作),在 spark2.0 中出现 Datasets 的概念,其中 DataFrame 也称 Datasets[row],python 中只有 DataFrame 的概念。
DataFrame 是基于 RDD 的一种数据类型,具有比 RDD 节省空间和更高运算效率的优点,对于使用 python 操作 spark 且熟悉 pandas 基本操作的工作者是一个好消息。
Pandas DataFrame 数据结构特性
DataFrame 是一种表格型数据结构,按照列结构存储,它含有一组有序的列,每列可以是不同的值,但每一列只能有一种数据类型。DataFrame 既有行索引,也有列索引,它可以看作是由 Series 组成的字典,不过这些 Series 公用一个索引(可以参考下图的数据结构轴线图)。
依赖 python 这一简洁明了的语言,dataframe 操作比较简洁,此外 dataframe 还拥有比较丰富的操作 api 接口,能比较容易实现中小型数据集的操作。
Spark DataFrame 数据结构与存储特性
在 Spark 中, DataFrame 是基于 RDD 实现的,一个以命名列方式组织的分布式数据集。实际存储与 RDD 一致,基于行存储,但是 Spark 框架本身不了解 RDD 数据的内部结构,而 DataFrame 却提供了详细的结构信息 (Schema),Spark DataFrame 将数据以单独表结构,分散在分布式集群的各台机器上,所以 spark dataframe 是天然的分布式表结构,具体差异可以参考下图。
使用 Spark DataFrame 优势
DataFrame 基于 RDD 的抽象,由于 DataFrame 具有定义好的结构, Spark 可以在作业运行时应用许多性能增强的方法。spark 对于 DataFrame 在执行时间和内存使