使用DataFrame有两个方式,分别是 SQL语法和DSL语法
➢ SQL语法
1. 通过 "临时视图" 来使用,所以先创建视图
2. 通过 sparkSession对象执行sql进行数据查询
scala> df.createOrReplaceTempView("user") //创建临时视图
scala> var viewdf = spark.sql("select id,name,age from user") //通过spark执行sql
viewdf: org.apache.spark.sql.DataFrame = [id: bigint, name: string] //执行sql返回的还是DF
scala> viewdf.show //展示DF中的数据
scala> spark.sql("select id,name,age from user").show //也可以直接查询sql并展示
+---+-----+---+
| id| name|age|
+---+-----+---+
| 1|jack1| 18|
| 2|jack2| 28|
| 3|jack3| 38|
+---+-----+---+
注意:
df.createOrReplaceTempView 只能创建当前会话有效的临时视图
df.createOrReplaceGlobalTempView 能创建所有会话都有效的临时视图
使用时 需要在视图名前面加上 global_temp.视图名
➢ DSL语法
DSL称为 Domain-Specific Language 特定领域语言
这是 DataFrame中管理结构化数据的API ,通过DataFrame就可以调用这些API
scala> df.printSchema
root
|-- age: long (nullable = true)
|-- id: long (nullable = true)
|-- name: string (nullable = true)
scala> df.select("name")
res20: org.apache.spark.sql.DataFrame = [name: string]
//基本查询
scala> df.select("name").show
+-----+
| name|
+-----+
|jack1|
|jack2|
|jack3|
+-----+
//列运算
scala> df.select($"age" + 1).show
scala> df.select('age + 1).show
+---------+
|(age + 1)|
+---------+
| 19|
| 29|
| 39|
+---------+
//取别名
scala> df.select('name,'age + 1 as "aa").show
+-----+---+
| name| aa|
+-----+---+
|jack1| 19|
|jack2| 29|
|jack3| 39|
+-----+---+
//统计函数
scala> df.select(avg("age") as "平均年龄").show
+--------+
|平均年龄|
+--------+
| 48.0|
+--------+
//条件过滤
scala> df.filter('age > 25).show
+---+---+-----+
|age| id| name|
+---+---+-----+
| 28| 2|jack2|
| 38| 3|jack3|
+---+---+-----+
//组合+聚合函数
scala> df.groupBy("id").count.show
+---+-----+
| id|count|
+---+-----+
| 1| 1|
| 3| 1|
| 2| 1|
+---+-----+