SparkSQL 高级篇(一) 聚合操作
聚合操作
聚合操作是大数据分析过程中一个常用的操作,用来分析汇总数据,或者生成汇总报告。
聚合通常需要对整个数据集或一个或多个列进行某种形式的分组,然后对每个组应用聚合函数,如求和、计数或求平均值。Spark提供了许多常用的聚合函数。这里介绍下基本的聚合函数和分组聚合操作函数。
首先创建一个用于demo的DataFrame
val flight_summary = spark.read.format("csv").option("header","true")
.option("inferSchema","true").load("flight-summary.csv")
flight_summary.count()
Long = 4693
这里的count()
是DataFrame的一个Action。
而我们这次介绍的聚合函数中的count()
是一个function,所有的聚合函数都是延迟计算的函数
基本聚合函数
- count(col)
- countDistinct(col)
- approx_count_distinct(col)
- min(col)
- max(col)
- sum(col)
- sumDistinct(col)
- avg(col)
- skewness(col)
- kurtosis(col)
- variance(col)
- stddev(col)
- collect_list(col)
- collect_set(col)
首先创建一个DataFrame
count(col)
函数
count(col)
函数用于统计一个分组中的项目的数量。比如统计数据中某些列的数量
例子:
flight_summary.select(count("origin_airport"), count("dest_airport").as("dest_count")).show
输出为:
+----------------------+-----------+
| count(origin_airport)| dest_count|
+----------------------+-----------+
| 4693| 4693|
+----------------------+-----------+
为了易读性这里用.as
对结果列重命名,并使用show
查看结果
默认情况下count(col)
统计一个列中的条目数的时候是不包含值为null
的那些行的。
如果要统计包含值为null
的那些行,需要使用count(*)
。
具体看下面这个例子
首先数据如下:
badMoviesDF.show
±---------±-------------±-------------+
|actor_name| movie_title| produced_year|
±---------±-------------±-------------+
| null| null| 2018|
| John Doe| Awesome Movie| 2018|
| null| Awesome Movie| 2018|
| Mary Jane| Awesome Movie| 2018|
±---------±-------------±-------------+
然后执行查询
badMoviesDF.select(count("actor_name"), count("movie_title"), count("produced_year"), count("*")).show
结果如下:
±-----------------±------------------±--------------------±--------+
| count(actor_name)| count(movie_title)| count(produced_year)| count(1)|
±-----------------±------------------±--------------------±--------+
| 2| 3| 4| 4|
±-----------------±------------------±--------------------±--------+
可以看到count(col)
不会包含列值为null的那些行。
countDistinct(col)
countDistinct(col)
和count(col)