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"