spark sql实战—如何同时对多列进行sum,min,max等操作
概述有时我们希望某个聚合操作,比如:sum,avg等,能够作用到多个列上,也就是一次计算一个或多个列的聚合值。这样可以简化我们的代码。本文讲述如何在实战中把聚合操作使用到多个列上。实战19.如何把聚合函数使用到多个列上?python的写法>>> df = spark.createDataFrame([(1.0, 0.3, 1.0), (1.0, 0.5, 0.0), (-1.0,
·
概述
有时我们希望某个聚合操作,比如:sum,avg等,能够作用到多个列上,也就是一次计算一个或多个列的聚合值。这样可以简化我们的代码。
本文讲述如何在实战中把聚合操作使用到多个列上。
实战
19.如何把聚合函数使用到多个列上?
- python的写法
>>> df = spark.createDataFrame([(1.0, 0.3, 1.0), (1.0, 0.5, 0.0), (-1.0, 0.6, 0.5), (-1.0, 5.6, 0.2)],("col1", "col2", "col3"))
>>> df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1.0| 0.3| 1.0|
| 1.0| 0.5| 0.0|
|-1.0| 0.6| 0.5|
|-1.0| 5.6| 0.2|
+----+----+----+
>>> df.groupBy("col1").sum().show()
+----+---------+-----------------+---------+
|col1|sum(col1)| sum(col2)|sum(col3)|
+----+---------+-----------------+---------+
|-1.0| -2.0|6.199999999999999| 0.7|
| 1.0| 2.0| 0.8| 1.0|
+----+---------+-----------------+---------+
>>> df.groupBy("col1").sum("col1", "col2").show()
+----+---------+-----------------+
|col1|sum(col1)| sum(col2)|
+----+---------+-----------------+
|-1.0| -2.0|6.199999999999999|
| 1.0| 2.0| 0.8|
+----+---------+-----------------+
- scala的写法
scala> val df = sc.parallelize(Seq((1.0, 0.3, 1.0), (1.0, 0.5, 0.0),(-1.0, 0.6, 0.5), (-1.0, 5.6, 0.2))).toDF("col1", "col2", "col3")
df: org.apache.spark.sql.DataFrame = [col1: double, col2: double ... 1 more field]
scala> df.groupBy($"col1").min().show
+----+---------+---------+---------+
|col1|min(col1)|min(col2)|min(col3)|
+----+---------+---------+---------+
|-1.0| -1.0| 0.6| 0.2|
| 1.0| 1.0| 0.3| 0.0|
+----+---------+---------+---------+
小结:默认groupBy后的计算函数都是作用于所有列的,你可以指定需要作用于那些列。
不同列使用不同的聚合函数(仅对scala有效):
可以对不同的列使用不同的聚合函数,代码如下:
scala> df.groupBy($"col1").agg(min($"col2"), sum($"col3")).show
+----+---------+---------+
|col1|min(col2)|sum(col3)|
+----+---------+---------+
|-1.0| 0.6| 0.7|
| 1.0| 0.3| 1.0|
+----+---------+---------+
小结
本文介绍了如何把多个聚合函数使用到不同列的方法。
更多推荐
所有评论(0)