【Spark】DataFrame关于数据常用操作


DSL语法

概述

1.查看全表数据 —— DataFrame.show
2.查看部分字段数据(有4种方法)
 (1) DataFrame.select("字段名称").show
 (2) DataFrame.select($"字段名称").show(推荐)
 (3) DataFrame.select(col("字段名称")).show
 (4) DataFrame.select(DataFrame.col("字段名称")).show
如果要查询多个字段,方法一样,后面跟着添加字段即可
3.打印schema信息 —— DataFrame.printSchema
4.查询多个字段,并对其中一个字段的值做+1的操作 —— DataFrame.select($"字段名称1",$"字段名称2",$"字段名称2" + 1)
5.过滤,拿到想要的数据 —— DataFrame.filter(条件).show
6.数据分组并计数 —— DataFrame.groupBy("字段名称").count().show

实例操作

// 查询全表数据
scala> personDF.show
+---+--------+---+
| id|    name|age|
+---+--------+---+
|  1|zhangsan| 20|
|  2|    lisi| 29|
|  3|  wangwu| 25|
|  4| zhaoliu| 30|
|  5|  tianqi| 35|
|  6|    kobe| 40|
+---+--------+---+
// 查询部分字段
// 方法一
scala> personDF.select(personDF.col("name")).show
+--------+
|    name|
+--------+
|zhangsan|
|    lisi|
|  wangwu|
| zhaoliu|
|  tianqi|
|    kobe|
+--------+
//方法二
scala> personDF.select(col("name")).show
+--------+
|    name|
+--------+
|zhangsan|
|    lisi|
|  wangwu|
| zhaoliu|
|  tianqi|
|    kobe|
+--------+
//方法三
scala> personDF.select($"name").show
+--------+
|    name|
+--------+
|zhangsan|
|    lisi|
|  wangwu|
| zhaoliu|
|  tianqi|
|    kobe|
+--------+
//方法四
scala> personDF.select("name").show
+--------+
|    name|
+--------+
|zhangsan|
|    lisi|
|  wangwu|
| zhaoliu|
|  tianqi|
|    kobe|
+--------+
// 打印schema信息
scala> personDF.printSchema
root
 |-- id: integer (nullable = false)
 |-- name: string (nullable = true)
 |-- age: integer (nullable = false)
// 查询所有的name和age,并将age+1
scala> personDF.select($"name",$"age",$"age"+1).show
+--------+---+---------+
|    name|age|(age + 1)|
+--------+---+---------+
|zhangsan| 20|       21|
|    lisi| 29|       30|
|  wangwu| 25|       26|
| zhaoliu| 30|       31|
|  tianqi| 35|       36|
|    kobe| 40|       41|
+--------+---+---------+
// 过滤age大于等于25的,使用filter方法过滤
scala> personDF.filter($"age" > 25).show
+---+-------+---+
| id|   name|age|
+---+-------+---+
|  2|   lisi| 29|
|  4|zhaoliu| 30|
|  5| tianqi| 35|
|  6|   kobe| 40|
+---+-------+---+
// 按年龄进行分组并统计相同年龄的人数
scala> personDF.groupBy($"age").count.show
+---+-----+                                                                     
|age|count|
+---+-----+
| 20|    1|
| 40|    1|
| 35|    1|
| 25|    1|
| 29|    1|
| 30|    1|
+---+-----+

SQL语法

概述

首先有一个必要的操作,就是把DataFrame注册成为一张table —— DataFrame.registerTmpTable("tbl_name")
然后用该格式填入sql语句即可 —— spark.sql("sql语句").show

实例操作

// 注册临时表
scala> personDF.registerTempTable("person")
warning: there was one deprecation warning; re-run with -deprecation for details
// 全表查询
scala> spark.sql("select * from person").show
+---+--------+---+
| id|    name|age|
+---+--------+---+
|  1|zhangsan| 20|
|  2|    lisi| 29|
|  3|  wangwu| 25|
|  4| zhaoliu| 30|
|  5|  tianqi| 35|
|  6|    kobe| 40|
+---+--------+---+

// 以name和age分组,查询年龄大于25岁的数据
scala> spark.sql("select name,age from person where age > 25 group by name,age").show
+-------+---+
|   name|age|
+-------+---+
|   lisi| 29|
|   kobe| 40|
|zhaoliu| 30|
| tianqi| 35|
+-------+---+
原文地址:https://www.cnblogs.com/zzzsw0412/p/12772388.html