随着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()