Spark SQL数据源和表的Schema
case class
apply schema
parquet
json
JSON数据源
准备源数据
{"name":"Jack", "age": 12, "addr":{"city":"beijing", "zipcode":"111"}}{"name":"Todd", "age": 22, "addr":{"city":"shandong", "zipcode":"222"}}{"name":"Ted", "age": 32, "addr":{"city":"hebei", "zipcode":"333"}}
?
?
这是一个嵌套的person信息,每一行是一个完整的JSON数据串,Spark SQL在解析的时候,也是按照行进行读
在Spark Shell上执行如下操作,即可得到结果Jack和Ted。
?
?
///创建SQL对象,传入当前的SparkContextscala> val sqlContext= new org.apache.spark.sql.SQLContext(sc) ///从本地磁盘加载json数据,从本地磁盘读取必须显式的执行URL Scheme;不指定则默认使用hdfsscala> val jsonpeople = sqlContext.jsonFile("file:///home/hadoop/software/spark-1.2.0-bin-hadoop2.4/examples/src/main/resources/people2.json")///注册临时表,所谓临时是指该表是跟当前的SQLContext绑定的,其它的Context看不到这个表///表共享如何做?scala> jsonpeople.registerTempTable("jsonTable")///查询操作scala> sqlContext.sql("SELECT name FROM jsonTable WHERE addr.zipcode = 111 or age >= 30").map(t => "Name: " + t(0)).collect().foreach(println)
?
?
可见,在Spark SQL操作JSON时,不需要因为RDD的隐式转换,因为这里没有RDD的隐式转换操作
?
val sqlContext= new org.apache.spark.sql.SQLContext(sc)
?
?
?
?