不多说,直接上干货!
SparkSQL的入口:SQLContext
- SQLContext是SparkSQL的入口
- val sc: SparkContext
- val sqlContext = new org.apache.spark.sql.SQLContext(sc)
- import sqlContext._ //导?入各种sql操作的?口与各种隐式转换
SparkSQL的入口: HiveContext
- HiveContext是SQLContext的子类,提供了对Hive的支持。
- complete HiveQL parser,
- access to Hive UDFs,
- the ability to read data from Hive tables,
- 编译时要包含Hive支持
mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.0 -Phive -Phive-thriftserver -DskipTests clean package
- 不需要提前安装Hive(连接已有Hive会在后续博文讲解)。
- HiveContext可以使用任何在SQLContext上可用的data source。
SQLContext vs HiveContext
SQLContext现在只支持SQL语法解析器(SQL-92语法)
val sc: SparkContext
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._ //导入各种sql操作的与各种隐式转换
SQLContext vs HiveContext
HiveContext现在支持SQL语法解析器和HiveSQL语法解析器,默认为HiveSQL语法解析器,用户可以通过配置切换成SQL语法解析器,来运行HiveSQL不支持的语法。
使用HiveContext可以使用Hive的UDF,读写Hive表数据等Hive操作。SQLContext不可以对Hive进行操作。
Spark SQL未来的版本会不断丰富SQLContext的功能,做到SQLContext和HiveContext的功能容和,最终可能两者会统一成一个Context。
HiveContext包装了Hive的依赖包,把HiveContext单独拿出来,可以在部署基本的Spark的时候就不需要Hive的依赖包,需要使用HiveContext时再把Hive的各种依赖包加进来。