SparkSQL 高级篇(一) 聚合操作

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

  1. 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的那些行。

  1. countDistinct(col)

countDistinct(col)count(col)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值