文章 查看内容

Spark聚合统计函数

Spark聚合统计函数

65 0 函数专题 2024-7-12 17:05 发布者: 观小凡

聚合统计,即对数据进行汇总和计算,以生成摘要统计信息或得到聚合结果。聚合函数通常与groupBy操作结合使用,以便在分组的数据上执行计算。
 

1. 概述

      聚合统计,即对数据进行汇总和计算,以生成摘要统计信息或得到聚合结果。聚合函数通常与groupBy操作结合使用,以便在分组的数据上执行计算。

2. 函数列表

      本文列表里的函数示例基于下图数据进行计算。

2.1. 常用聚合计算

用途

函数

示例

结果

求和

sum(col)

try_sum(col) *

sum([expr1])

try_sum([expr1])

20

平均值

avg(col)

mean(col)

try_avg(col) *

avg([expr1])

mean([expr])

try_avg([expr])

3.333333

计数

count(*):返回包含null的行数; count(col):返回col列非null的行数。

count(col)

count(*)

count([expr1])

7

6

去重计数
count_distinct是精确计算;approx_count_distinct是近似估算。

count(distinct col)

approx_count_distinct(col) *

count(distinct [expr1])

approx_count_distinct([expr1])

5

5

对计算满足特定条件的值计数

count_if(expr)

count_if([expr1]>=3 and [expr1]<=5)

2

去重求和

sum(distinct col)

sum(distinct [expr1])

18

最大值

max(col)

max([expr1])

6

返回与y的最大值关联的x的值

max_by(x, y)

max_by([expr1],[Date])

null

最小值

min(col)

min([expr1])

1

返回与y的最小值关联的x的值

min_by(x, y)

min_by([expr2],[Date])

4

中位数

median(col)

median([expr1])

3

众数,即列中最频繁的值。

mode(col)

mode([expr1])

2

返回数据列的确切百分位数值。

百分比在0.0和1.0之间,可用于求四分位数。

percentile(col, pct)

percentile([expr1],0.5)

percentile([expr1],array(0.25,0.5,0.75))

3

[2.0, 3.0, 4.75]

返回数据列的近似百分位数值。

百分比在0.0和1.0之间,可用于求四分位数。acc越高越精确,省略时默认为10000。

approx_percentile(col, pct [, acc]) *

percentile_approx(col, pct [, acc]) *

approx_percentile([expr1],0.5)

2

总体标准差

stddev_pop(col)

stddev_pop([expr1])

1.795055

样本标准差

std(col) ; stddev(col) ;

stddev_samp(col)

stddev([expr1])

1.966384

总体方差

var_pop(col)

var_pop([expr1])

3.222222

样本方差

var_samp(col) variance(col)

var_samp([expr1])

3.866667

返回两个数值之间的总体协方差。

covar_pop(col1,col2)

covar_pop([expr1],[expr2])

0.222222

返回两个数值之间的样本协方差。

covar_samp(col1,col2)

covar_samp([expr1],[expr2])

0.266667

两个数值列之间的皮尔逊相关系数

corr(col1,col2)

corr([expr1],[expr2])

0.092131

注释*:

  • 包含 try 的函数,数值溢出时返回null,适用于位数较长的数值计算场景;
  • 包含 approx 的函数为近似计算,通常用于大数据集,在牺牲一点精确度的情况下大幅提高计算速度。这种方法对于需要快速分析的场景特别有用,如实时数据处理或大规模数据集探索。

2.2. 数组聚合

用途

函数

示例

结果

多行数据合并成一个数组,不去重

collect_list(expr)

collect_list([expr1])

[1, 2, 4, 6, 2, 5]

多行数据合并成一个数组,去重

collect_set(expr)

collect_set([expr1])

[1, 5, 2, 6, 4]

2.3. 逻辑判断聚合

用途

函数

示例

结果

如果列 expr 中至少有一个值为true,则返回true。

any(expr)

any( [expr1] >=3 )

true

some(expr)

some( [expr1] is null )

true

bool_or(expr)

bool_or( month([Date]) >1 )

false

如果列 expr 中所有值都为true,则返回true。

every(expr)

every( [expr1] >=3 )

false

bool_and(expr)

bool_and( [expr1]<10 )

true

3. 注意事项:

  • 聚合函数创建的字段,在卡片里展示为聚合度量,放入数值栏后不能选择聚合方式;
  • 聚合函数不能放在维度栏中,因为聚合函数需要根据指定的维度项进行聚合;
  • 聚合函数不可再嵌套聚合函数或者开窗函数,会导致语义上的混淆,BI系统也会抛出报错。



路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部