概述
spark的DataFrames和DataSets是spark SQL中的关键概念,相比于RDD,DataFrame更能描述数据类型,因此是spark sql的基础类型,同时在spark 2.0.x及其以后的版本中,spark的机器学习也会逐渐替换成基于DataFrame的api,所有我们有必要了解spark的DataFrame相关概念。
spark sql在spark框架中的位置:
我们可以看到,spark sql是建立在spark框架之上的一个大数据关系型数据处理系统,和impala类似。
其核心部分有两个:DataFrame API和Catalyst引擎,SparkSQL的优化器系统Catalyst和大多数当前的大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等),本篇我们重点看看DataFrame的基本原理和使用。
DataFrame基本原理
和RDD的比较
我们知道,RDD是spark早期很重要的一个概念,是数据的immutable distributed的集合,由不同节点上的partition组成。DataFrame和RDD类似,也是数据的不可变分布式集合。不同的是,数据被组织成带名字的列,就像关系型数据库中的表。是一种有结构的高级别抽象,与之相应的提供了一种领域特定语言(DSL)API来操作这些分布式数据。
DataFrame直观上很像是RDDs的加强版,它和RDDs在数据存储上最大的区别就在于,DataFrame是有Schema的,通俗的讲,就是上图中蓝色框住的那个表头。不要小看这一点,对于复杂的数据类型,DataFrame的这种结构可以使编程大大简化。
在spark2.0后,DataFrame的API和DataSet的API合并统一了,现在只需要处理DataSet相关API