随着Spark1.2的发布,Spark SQL开始正式支持外部数据源。这使得Spark SQL支持了更多的类型数据源,如json, parquet, avro, csv格式。只要我们愿意,我们可以开发出任意的外部数据源来连接到Spark SQL。

示例: 存储json数据。

CREATE TEMPORARY TABLE jsonTable
USING org.apache.spark.sql.json
OPTIONS (
  path '/path/to/data.json'
)

详细示例:
1. DDL创建外部数据资源表jsonTable
scala> import org.apache.spark.sql.SQLContext
scala> import sqlContext._
//创建jsonTable外部数据源表,并且指定其数数据源文件是people.json这个json文件,同时指定使用org.apache.spark.sql.json该类型的隐式转化类
scala> val jsonDDL = s"""
     | |CREATE TEMPORARY TABLE jsonTable
     | |USING org.apache.spark.sql.json
     | |OPTIONS (
     | | path  'file:///Users/shengli/git_repos/spark/examples/src/main/resources/people.json'
     | |)""".stripMargin
jsonDDL: String = 
"
CREATE TEMPORARY TABLE jsonTable
USING org.apache.spark.sql.json
OPTIONS (
 path  'file:///Users/shengli/git_repos/spark/examples/src/main/resources/people.json'
)"

scala> sqlContext.sql(jsonDDL).collect() //创建该外部数据源表jsonTable
res0: Array[org.apache.spark.sql.Row] = Array()

2.查看schemaRDD
scala> val jsonSchema = sqlContext.sql(jsonDDL)
ExecutedCommand来取把数据用spark.sql.json的方式从path加载到jsonTable中。

3.查看各阶段执行计划:
scala> sqlContext.sql("select * from jsonTable").queryExecution
4.sql查询:
scala> sqlContext.sql("select * from jsonTable")
5.执行sql:
scala> sqlContext.sql("select * from jsonTable").collect



API使用:
scala> sqlContext.jsonFile("file:///Users/shengli/git_repos/spark/examples/src/main/resources/people.json")
scala> json.registerTempTable("jsonFile")
scala> sql("select * from jsonFile").collect()