Spark SQL允许您使用SQL或使用DataFrame API查询Spark程序内的结构化数据。
有关Spark SQL的详细信息,请参阅Spark SQL和DataFrame指南。
继续阅读:
SQLContext和HiveContext
所有Spark SQL功能的入口点是 SQLContext 类或其后代之一。你创建一个 SQLContext 从一个 SparkContext 。使用SQLContext ,您可以从RDD,Hive表或数据源创建DataFrame。
要在Spark应用程序中使用存储在Hive或Impala表中的数据,请构建一个 HiveContext ,它继承自SQLContext 。使用 HiveContext ,您可以访问Hive或Impala表等代表的Metastore数据库。
注意:
Hive和Impala表和相关的SQL语法在大多数方面是可以互换的。因为Spark使用底层Hive基础架构,所以使用Spark SQL您可以使用HiveQL语法编写DDL语句,DML语句和查询。对于交互式查询性能,可以通过Impala使用impala-shell或Impala JDBC和ODBC接口访问相同的表。
如果你使用 spark-shell , 一个 HiveContext 已经为你创建,并作为 sqlContext 变量。
如果你使用 spark-submit ,在程序开始时使用如下代码:
Python:
from pyspark import SparkContext, HiveContext
sc = SparkContext(appName = "test")
sqlContext = HiveContext(sc)
Spark应用程序提交的主机 或 spark-shell or pyspark 运行的主机,运行必须具有在Cloudera Manager 中定义的Hive 网关角色以及部署的客户端配置。
当Spark作业访问Hive视图时,Spark必须有权读取底层Hive表中的数据文件。目前,Spark不能使用基于列或者where子句。如果Spark没有底层数据文件所需的权限,则针对视图的SparkSQL查询将返回空结果集,而不是错误。
将文件查询到DataFrame中
如果数据文件位于Hive或Impala表之外,则可以使用SQL将JSON或Parquet文件直接读取到DataFrame中:
JSON:
df = sqlContext.sql("SELECT * FROM json.`input dir`")
Parquet:
df = sqlContext.sql("SELECT * FROM parquet.`input dir`")
Spark SQL示例
<