Spark SQL DataFrame

1. 目的

本章介绍了Spark RDD的局限性以及DataFrame如何克服这些限制,如何在Spark中创建DataFrame,DataFrame的功能,如内存管理、优化执行计划。

2. DataFrame介绍

DataFrame出现在Spark Release 1.3中。DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库的表,DataFrame带有Schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。

Spark中的DataFrame优于RDD,并包含RDD的功能。DataFrame和RDD共有的特性是不变性、内存计算、弹性和分布式计算能力。它允许用户将Schema元信息加到分布式数据集合上,从而提供更高层次的抽象。

在Scala和Java中,我们都将DataFrame表示为行的数据集。在Scala API中,DataFrame是Dataset[Row]的类型别名。在Java API中,用户使用Dataset<Row>来表示DataFrame。

3. 为什么选择DataFrame

DataFrame提供了内存管理和优化执行计划,RDD没有提供这些。

1)内存管理

数据以二进制格式存储在堆外内存中,因此节省大量内存,减少了垃圾回收的开销,减少了Java序列化的开销。

2)优化执行计划

使用查询优化器为查询创建一个优化的执行计划,优化的执行计划最终将在Spark的RDD上执行。

4. DataFrame的特点

Spark RDD的一些限制是:

1)没有任何内置的优化引擎。

2)没有规则来处理结构化数据。

为了克服这些限制,DataFrame出现了,DataFrame的一些关键特性是:

1)DataFrame带有Schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。

2)可以处理结构化和半结构化数据。例如Avro、CSV、Elastic search、Cassandra、HIVE表,MySQL等。

3)Catalyst优化器

4)DataFrame API可用多种编程语言提供,例如Scala、Java。

5)提供了Hive兼容性,可以在现有的Hive仓库上运行未经修改的Hive查询。

6)可以从单台电脑上的GB数据扩展到大型群集上的PB数据。

7)DataFrame通过Spark Core与大数据工具和框架轻松集成。

5. 在Spark中创建DataFrame

SparkSession类是使用Spark入口,使用下面的方法创建SparkSession:

SparkSession.builder()

使用SparkSession,应用程序可以从现有的RDD、Hive表或Spark数据源创建DataFrame。使用DataFrame接口对各种数据源进行操作,我们可以创建一个临时视图,然后运行SQL查询临时视图。

6. DataFrame的限制

1)DataFrame API没有提供编译时的类型安全,所以,如果结构未知,我们不能操纵数据。

2)一旦域对象(domain object)转换为DataFrame后,就不可能重新生成域对象了。

7. 结论

DataFrame提供了内存管理和优化执行计划,可以处理结构化和半结构化数据,提高了Spark的性能和可伸缩性。

Spark SQL DataFrame
滚动到顶部