Spark DataFrame算子使用与窗口函数

Spark DataFrame常用算子介绍
1. where

where(conditionExpr: String):SQL语言中where关键字后的条件,传入筛选条件表达式,可以用and和or。得到DataFrame类型的返回结果, 示例:

data.where("score >99 or lesson != 'Math'").show

在这里插入图片描述

2.filter

用法与where一样

data.filter("score >99 or lesson != 'Math'").show

在这里插入图片描述

3.select
(一) select:获取指定字段值

根据传入的String类型字段名,获取指定字段的值,以DataFrame类型返回。示例:

data.select("name").show

在这里插入图片描述

还可以这样,传入一个Column类型参数,实现score+1这种效果

data.select(data("name"),data("score") + 1).show

在这里插入图片描述

**(二) selectExpr:可以直接对指定字段调用UDF函数,或者指定别名等。传入String类型参数,得到DataFrame对象。 **
spark.udf.register("plusOne",(i:Int) => i+1)
spark.udf.register("addfrr",(s:String) => s + "_frr")

data.selectExpr("addfrr(name)","lesson as les","plusOne(score)").show

在这里插入图片描述

4.col

获取指定字段 ,且只能获取一个字段,返回对象为Column类型。

5.apply

获取指定字段 ,且只能获取一个字段,返回对象为Column类型

6.drop

去除指定字段,保留其他字段 ,返回一个新的DataFrame对象,其中不包含去除的字段,一次只能去除一个字段。

7.limit

limit方法获取指定DataFrame的前n行记录,得到一个新的DataFrame对象。和take与head不同的是,limit方法不是Action操作。

8.order by

类似的还有sort,按指定字段排序,默认为升序

data.sort("score").show()

data.sort(data("score").desc).show

data.orderBy("score").show

data.orderBy(data("score").desc).show

在这里插入图片描述

在这里插入图片描述
sortWithinPartitions

和上面的sort方法功能类似,区别在于sortWithinPartitions方法返回的是按Partition排好序的DataFrame对象。

9 .group by
(一) groupBy:根据字段进行group by操作

groupBy方法有两种调用方式,可以传入String类型的字段名,也可传入Column类型的对象。 使用方法如下,

data.groupBy("name").count.show

data.groupBy(data("name")).count.show

在这里插入图片描述

#####(二) cube 与rollup

cude也是聚合,但是是全维度的聚合

cube(a,b,c)则首先会对(a,b,c)进行group by,
然后依次是(a,b),(a,c),(a),(b,c),(b),©,最后在对全表进行group by,他会统计所选列中值的所有组合的聚合
用cube函数就可以完成所有维度的聚合工作

data.cube("name","lesson").sum("score").show

在这里插入图片描述

rollup函数是cube的子集,以最左侧维度为主,按照顺序依次进行聚合. 例如聚合的维度为 col1,col2,col3
使用rollup聚合的字段分别为 col1,(col1,col2),(col1,col3),(col1,col2,col3)

data.rollup("name","lesson").sum("score").show

在这里插入图片描述

(三)GroupedData对象

该方法得到的是GroupedData类型对象,在GroupedData的API中提供了group by之后的操作,比如,

max(colNames: String*)方法,获取分组中指定字段或者所有的数字类型字段的最大值,只能作用于数字型字段
min(colNames: String*)方法,获取分组中指定字段或者所有的数字类型字段的最小值,只能作用于数字型字段
mean(colNames: String*)方法,获取分组中指定字段或者所有的数字类型字段的平均值,只能作用于数字型字段
sum(colNames: String*)方法,获取分组中指定字段或者所有的数字类型字段的和值,只能作用于数字型字段
data.groupBy("name").avg("score").show

在这里插入图片描述

10. agg

聚合操作调用的是agg方法,该方法有多种调用方式。一般与groupBy方法配合使用。

data.groupBy("name"
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值