Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame並且作為分散式SQL查詢引擎的作用。為什麼要學習Spark SQL?如果大家瞭解Hive的話,應該知道它是將Hive SQL轉換成MapReduce然後提交到集群上執行,大大簡化了編寫MapRedu ...
Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame並且作為分散式SQL查詢引擎的作用。為什麼要學習Spark SQL?如果大家瞭解Hive的話,應該知道它是將Hive SQL轉換成MapReduce然後提交到集群上執行,大大簡化了編寫MapReduce的程式的複雜性,由於MapReduce這種計算模型執行效率比較慢。所以Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然後提交到集群執行,執行效率非常快!同時Spark SQL也支持從Hive中讀取數據。 Spark SQL也能自動解析JSON數據集的Schema,讀取JSON數據集為DataFrame格式。讀取JSON數據集方法為SQLContext.read().json()。該方法將String格式的RDD或JSON文件轉換為DataFrame。 需要註意的是,這裡的JSON文件不是常規的JSON格式。JSON文件每一行必須包含一個獨立的、自滿足有效的JSON對象。如果用多行描述一個JSON對象,會導致讀取出錯。
- 需要用到的測試數據:people.json
{"name":"Michael"} {"name":"Andy", "age":30} {"name":"Justin", "age":19}
- 定義路徑
val path ="/root/temp/people.json"
- 讀取Json文件,生成DataFrame:
val peopleDF = spark.read.json(path)
- 列印Schema結構信息
peopleDF.printSchema()
- 創建臨時視圖
peopleDF.createOrReplaceTempView("people")
- 執行查詢
spark.sql("SELECT name FROM people WHERE age=19").show