SparkSQL中SQL風格和DSL風格的使用

準備工作

讀取文件並轉換爲DataFrame或DataSet

val lineRDD= sc.textFile("hdfs://node-01:9000/person.txt").map(_.split(" "))

case class Person(id:Int, name:String, age:Int)

val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))

val personDF = personRDD.toDF

personDF.show

personDF.printSchema

//val personDS = personRDD.toDS

//personDS.show 

DSL風格

SparkSQL提供了一個領域特定語言(DSL)以方便操作結構化數據

 

1.查看name字段的數據

personDF.select(personDF.col("name")).show

personDF.select(personDF("name")).show

personDF.select(col("name")).show

personDF.select("name").show

 

2.查看 name 和age字段數據

personDF.select("name", "age").show

 

3.查詢所有的name和age,並將age+1

 

personDF.select(personDF.col("id"), personDF.col("name"), personDF.col("age") + 1).show

personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show

personDF.select(col("id"), col("name"), col("age") + 1).show

personDF.select("id","name","age").show

personDF.select($"name",$"age",$"age"+1).show

 

4.過濾age大於等於25的,使用filter方法過濾

personDF.filter(col("age") >= 25).show

personDF.filter($"age" >25).show

 

5.統計年齡大於30的人數

personDF.filter(col("age")>30).count()

personDF.filter($"age" >30).count()

6.按年齡進行分組並統計相同年齡的人數

personDF.groupBy("age").count().show

 

 

​​​​​​​​​​​​​​SQL風格

DataFrame的一個強大之處就是我們可以將它看作是一個關係型數據表,然後可以通過在程序中使用spark.sql() 來執行SQL查詢,結果將作爲一個DataFrame返回

如果想使用SQL風格的語法,需要將DataFrame註冊成表,採用如下的方式:

personDF.createOrReplaceTempView("t_person")

spark.sql("select * from t_person").show

 

1.顯示錶的描述信息

spark.sql("desc t_person").show

 

2.查詢年齡最大的前兩名

spark.sql("select * from t_person order by age desc limit 2").show

 

3.查詢年齡大於30的人的信息

spark.sql("select * from t_person where age > 30 ").show

 

4.使用SQL風格完成DSL中的需求

spark.sql("select name,age+1 from t_person").show

spark.sql("select name,age from t_person where age > 25").show

spark.sql("select count(age) from t_person where age > 30").show

spark.sql("select age, count(age) from t_person group by age").show

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章