目录
- 概述
- SQL
- DataFrames
- Datasets
- Getting Started
- Starting Point:SQLContext
- DataFrame
- 创建 DataFrames
- DataFrame操作
- 执行SQL查询
- Dataset
- 创建Datasets
- 与RDDs交互操作
- 使用Reflection推断Schema
- 程序自动指定Schema
概述
Spark SQL是一个用作结构数据处理的一个模块。不像Spark RDD中的API,Spark SQL提供给Spark更多关于数据和计算的信息。从内部来说,Spark SQL提取信息的接口经过额外的优化。有很多方法使用Spark SQL,包括SQL, DataFrames的API和Datasets的API。Spark SQL的计算引擎与语言或者API是独立开的。这种统一意味着开发人员可以很容易在不同的APIs之间来回切换,这就提供了最自然的方式来表达一个给定的转换。
SQL
Spark SQL可以使用基础的SQL或者HiveQL执行SQL查询。Spark SQL也可以被用来从已存在的Hive数据库中读取数据。读取的数据库被返回为DataFrame。
DataFrames
如果用过R或者python的pandas库的话,对DataFrames就特别熟悉了。直观的角度,数据是存在类似excel表中。不理解的话可以百度一下R的DataFrame结构。
Datasets
Dataset是Spark 1,。6中新的一种接口,目前还在试验阶段,Dataset尝试提供类似于RDDS优点的数据存取,同时又兼顾SQL的引擎优化。一个Dataset可以从JVM对象中被构造,使用transformations对数据进行操作。
Getting Started
Starting Point:SQLContext
(下面的代码我全部使用python代码,首先我对python比较熟悉,再者python简洁好理解,可能工程上使用java的居多,但是目前阶段需要快速,优质的掌握SparkSQL的相关概念和理论。)
Spark中SparkSQL的入口点就是SQL
Context类,或者他的派生。当然在穿件一个基础的SQLContext之前,我们需要创建一个SparkContext。
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
#这里的sc是创建的SparkContext
除了使用SQLContext,我们也可以使用HiveContext,HiveContext比基础的SQLContext提供更多的功能。这些功能暴多:使用HiveQL解析器查询,使用Hive UDFs和从Hive tables中读取数据的能力。比较麻烦的是HiveContext是独立的包,有很多麻烦的依赖,如果能够搞定这个的话,哪使用HiveContext就不成问题了。
DataFrame
创建 DataFrames
使用SQLContext,应用可以从已存的RDD中,