Spark SQL 究竟是何方神圣?

项目开发工程师 (3.8万) 2016-06-19 10:03:33

Spark SQL允许大家在Python、Java以及Scala中使用数据帧;利用多种结构化格式读取并写入数据;通过SQL进行大数据查询。

Spark SQL属于Spark用于处理结构化与半结构化数据的接口。结构化数据是指那些拥有一定模式的数据,包括JSON、Hive Tables以及Parquet。模式意味着每条记录都拥有一套已知字段组。半结构化数据则代表着模式与数据之间不存在明确的区分。

Spark SQL提供三种主要功能以使用结构化及半结构化数据:

1. 在Python、Java与Scala中提供DataFrame抽象以简化结构化数据集的处理方式。DataFrame类似于关系数据库中的表。

2. 它能够对多种结构化格式进行数据读取及写入(例如JSON、Hive Tables以及Parquet)。

3. 允许大家利用SQL进行数据查询,适用范围包括Spark程序之内以及通过标准数据库连接器(JDBC/ODBC)接入Spark SQL的外部工具,例如Tableau等商务智能工具。

链接

将Spark SQL纳入应用,需要提供额外的库关联性。Spark SQL在构建中可选择支持或不支持Apache Hive。在以二进制方式下载Spark时,其默认构建为Hive支持模式。

在应用中使用Spark SQL

Spark SQL最适合用于Spark应用之内。通过这种方式,我们能够轻松将数据加载与数据查询进行结合,同时将其与Python、Java或者Scala协作使用。

基本查询示例

要查询一套表,我们需要在HiveContext或者SQLContext上调用sql()方法。

Scala代码示例:从JSON加载客户数据:

  1. val customers = sqlContext.jsonFile("customers.json")
  2. customers.registerTempTable("customers")
  3. val firstCityState = sqlContext.sql("SELECT first_name, address.city, address.state FROM customers LIMIT 10")

DataFrames

DataFrames类似于关系数据库中的表。DataFrame事实上属于Row对象的一条RDD。一个DataFrame还能够识别出每一行中的模式。由于能够识别数据模式,DataFrames的数据存储效率比原生RDD更高。

缓存

Spark SQL中的缓存更为高效,这是因为DataFrame能够识别各列的类型。

数据载入及保存

Spark SQL能够原生支持多种结构化数据源,包括Hive表、JSON以及Parquet文件。

另外,Spark SQL还拥有用于集成的DataSource API。DataSource API所能够实现的集成对象包括Avro、Apache HBase、Elasticsearch以及Canssandra等等。完整的支持列表可参阅http://spark-packages.org。

JDBC连接

Spark SQL提供JDBC连接,其能够用于同Tableau等商务智能工具的对接。

用户定义功能(简称UDF)

Spark SQL支持在Python、Java以及Scala当中注册用户定义功能,从而在SQL内部进行调用。这一能力可为SQL带来更多先进功能,帮助用户无需编码即可加以使用。

Spark SQL性能

Spark SQL的额外类型信息使其更为高效,且能够提供远超关系数据库的SQL性能。它还简化了各类条件型聚合操作,包括计算多个列的数值总和。

性能调节选项

Spark SQL当中提供多种不同性能调节选项,例如codegen、内存设置、批量大小与压缩编码等等。

总结

在多种数据处理流程当中,Spark SQL与Python、Scala或者Java代码相结合都能够带来便捷而强大的实际效果。另外,Spark SQL亦能够利用模式识别能力充分发挥该引擎的性能优势。

THE END

发表评论