当前位置 博文首页 > Shockang的博客:DataFrame 是什么?

    Shockang的博客:DataFrame 是什么?

    作者:[db:作者] 时间:2021-08-13 09:54

    前言

    本文隶属于专栏《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

    cs