Spark 2.2.1 JSON 数据集操作的案例与解读

Spark 2.2.1 JSON 数据集操作的案例与解读

Spark SQL可以自动推导出一个JSON数据集的Schema并加载构建一个DataFrame/DataSet,可以通过以下方法实现:

  • 使用spark.read.json(path)加载:从一个 JSON 文件的目录加载数据,文件中的每一行都对应一个 JSON 对象。
  •  使用spark.read.json(json(jsonDataset:Dataset[String])加载:从一个现有的 Dataset[String]加载数据,Dataset[String]中的每一个元素都是一个包含一个JSON 对象的字符串。

 

1)      通过spark.read.json(path)加载Json文件构建DataFrame的案例:

加载/resources/people.json文件。

scala> valpeople = spark.read.json("/resources/people.json")

people:org.apache.spark.sql.DataFrame = [age: bigint, name: string]

  打印people的Schema信息。

scala>people.printSchema

root

 |-- age: long (nullable = true)

|-- name: string(nullable = true)

                  

 使用createOrReplaceTempView方法注册临时表。

scala>people.createOrReplaceTempView("people")

 

使用spark.sql查询年龄在13岁至19岁之间的人员信息。

scala> valteenagerNamesDF = spark.sql("SELECT name FROM people WHERE age BETWEEN

13 AND 19")

teenagerNamesDF:org.apache.spark.sql.DataFrame = [name: string]

 

scala>  teenagerNamesDF.show()

+------+

|  name|

+------+

|Justin|

+------+

 

 案例中加载people.json文件构建出people,并通过printSchema方法打印出people的自动推导出的Schema信息,将people注册为临时表”people”,然后使用SQL查询语句从”people”临时表中查找年龄在指定范围的名字信息。

 

2)       从现有的Dataset[String]加载Json数据构建DataFrame案例。

构建Dataset[String]实例,元素类型为Json格式的字符串。

scala>     val otherPeopleDataset = spark.createDataset(

     |      """{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""":: Nil)

otherPeopleDataset:org.apache.spark.sql.Dataset[String] = [value: string]

 

 从元素类型为Json格式的字符串的Dataset[String]构建出 DataFrame 实例。

scala>   val otherPeople =spark.read.json(otherPeopleDataset)

otherPeople:org.apache.spark.sql.DataFrame = [address: struct, name:

string]

 

  打印otherPeople的Schema结构信息。

scala>otherPeople.printSchema

root

 |-- address: struct (nullable = true)

 |    |--city: string (nullable = true)

 |    |--state: string (nullable = true)

|-- name: string(nullable = true)

                  

                   查询otherPeople中的数据。

scala>  otherPeople.show()

+---------------+----+

|        address|name|

+---------------+----+

|[Columbus,Ohio]|Yin|

+---------------+----+

 


案例中字符串"""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}"""是Json格式,包含两个成员”name”和”address”,其中”address”又由一个数据结构组成,包含”city”和”state”两个成员。

通过spark.createDataset方法从List[String]构建出Dataset[String],再通过spark.read.json方法将Dataset[String]实例转换为DataFrame实例。通过printSchema打印构建时自动推导出的Schema。

 

将otherPeople注册临时表,然后使用Sql进行统计:

scala>otherPeople.createOrReplaceTempView("people")

 

spark.sql查询中以name列进行分组,并根据count(address.city)的个数统计值进行排序,查找name和address.city的个数统计。

scala> valresult = spark.sql("select name, count(address.city) as count from peoplegroup by name

order bycount")

result: org.apache.spark.sql.DataFrame= [name: string, count: bigint]

        

查询打印结果。

scala>result.show

+----+-----+                                                                   

|name|count|

+----+-----+

| Yin|    1|

+----+-----+

 

         对临时表的Sql操作,根据Name进行Group By,以Address.city统计个数进行Order By,然后获取NameAddress.city统计个数信息,构建新的DataFrameSpark SQL通过spark.sql.dialect配置属性来设置SQL语句方言分析。

 

 

2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》畅销书籍 清华大学出版社发行上市!

本书基于Spark 2.2.0最新版本(2017年7月11日发布),以Spark商业案例实战和Spark在生产环境下几乎所有类型的性能调优为核心,以Spark内核解密为基石,分为上篇、中篇、下篇,对企业生产环境下的Spark商业案例与性能调优抽丝剥茧地进行剖析。上篇基于Spark源码,从一个动手实战案例入手,循序渐进地全面解析了Spark 2.2新特性及Spark内核源码;中篇选取Spark开发中最具有代表的经典学习案例,深入浅出地介绍,在案例中综合应用Spark的大数据技术;下篇性能调优内容基本完全覆盖了Spark在生产环境下的所有调优技术。


本书适合所有Spark学习者和从业人员使用。对于有分布式计算框架应用经验的人员,本书也可以作为Spark高手修炼的参考书籍。同时,本书也特别适合作为高等院校的大数据教材使用。

当当网、京东、淘宝、亚马逊等网店已可购买!欢迎大家购买学习!

当当网址: http://product.dangdang.com/25230552.html

 

你可能感兴趣的:(AI,&,Big,Data案例实战课程)