本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系
DataFrame 的定义与 RDD 类似,即都是 Spark 平台用以分布式并行计算的不可变分布式数据集合。
与 RDD 最大的不同在于, RDD 仅仅是一条条数据的集合,并不了解每一条数据的内容是怎样的,
而 DataFrame 明确的了解每一条数据有几个命名字段组成,
即可以形象地理解为 RDD 是一条条数据组成的一维表,而 DataFrame 是每一行数据都有共同清晰的列划分的二维表。
关于 RDD 和 DataFrame 的区别请参考我的这篇博客——RDD 和 DataFrame 的区别是什么?
概念上来说,它和关系型数据库的表或者 R 和 Python 中 DataFrame 等价,只不过 DataFrame 在底层实现了更多优化从编程角度来说,
DataFrame 是 Spark SQL 模块所需处理的结构化数据的核心抽象,即在 Spark 程序中若想要使用简易的 SQL 接口对数据进行分析,首先需要将所处理数据源转化为 DataFrame 对象,进而在 DataFrame 对象上调用各种 API 来实现需求。
DataFrame 可以从许多结构化数据源加载并构造得到,如:结构化数据文件, Hive 中的表,外部数据库,已有的 DataframeAPI 支持多种高级程序语言 Scala 、 Java 、 Python 和 R 。
另外值得注意的是,正如下面源码中所提示的那样,在 Java 和 Scala 中, DataFrame 其实就是 Data/Dataset[Row],即由表示每一行内容的 Row 对象组成的 Dataset 对象,
type DataFrame = Dataset[Row]
因此大家如果想去官方 API 手册查询 DataFrame 丰富的 API 时,应该在 Dataset 类下查找。
关于 Dataset 请参考我的博客——从 Spark 源码角度解读 Dataset