sparksql 定义聚合函数_SparkSQL:将聚合函数应用于列列表

将聚合函数应用于多个列有多种方法 .

GroupedData 类为最常用的函数提供了许多方法,包括 count , max , min , mean 和 sum ,可以直接使用如下:

Python:

df = sqlContext.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.groupBy("col1").sum()

## +----+---------+-----------------+---------+

## |col1|sum(col1)| sum(col2)|sum(col3)|

## +----+---------+-----------------+---------+

## | 1.0| 2.0| 0.8| 1.0|

## |-1.0| -2.0|6.199999999999999| 0.7|

## +----+---------+-----------------+---------+

斯卡拉

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.groupBy($"col1").min().show

// +----+---------+---------+---------+

// |col1|min(col1)|min(col2)|min(col3)|

// +----+---------+---------+---------+

// | 1.0| 1.0| 0.3| 0.0|

// |-1.0| -1.0| 0.6| 0.2|

// +----+---------+---------+---------+

您可以选择传递应该聚合的列的列表

df.groupBy("col1").sum("col2", "col3")

您还可以使用键和字符串传递字典/映射作为值:

Python

exprs = {x: "sum" for x in df.columns}

df.groupBy("col1").agg(exprs).show()

## +----+---------+

## |col1|avg(col3)|

## +----+---------+

## | 1.0| 0.5|

## |-1.0| 0.35|

## +----+---------+

斯卡拉

val exprs = df.columns.map((_ -> "mean")).toMap

df.groupBy($"col1").agg(exprs).show()

// +----+---------+------------------+---------+

// |col1|avg(col1)| avg(col2)|avg(col3)|

// +----+---------+------------------+---------+

// | 1.0| 1.0| 0.4| 0.5|

// |-1.0| -1.0|3.0999999999999996| 0.35|

// +----+---------+------------------+---------+

最后你可以使用varargs:

Python

from pyspark.sql.functions import min

exprs = [min(x) for x in df.columns]

df.groupBy("col1").agg(*exprs).show()

斯卡拉

import org.apache.spark.sql.functions.sum

val exprs = df.columns.map(sum(_))

df.groupBy($"col1").agg(exprs.head, exprs.tail: _*)

还有其他一些方法可以达到类似的效果,但这些方法在大多数情况下应该足够了 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值