将二进制运算符应用于初始状态和数组中的所有元素,并将其减少为单个状态。 最终状态通过应用 finish 函数转换为最终结果。
有关相应的 Databricks SQL 函数,请参阅 reduce 函数。
Syntax
from pyspark.databricks.sql import functions as dbf
dbf.reduce(col=<col>, initialValue=<initialValue>, merge=<merge>, finish=<finish>)
参数
| 参数 | 类型 | Description |
|---|---|---|
col |
pyspark.sql.Column 或 str |
列或表达式的名称。 |
initialValue |
pyspark.sql.Column 或 str |
初始值。 列或表达式的名称。 |
merge |
function |
一个二进制函数,返回与零相同的类型的表达式。 |
finish |
function自选 |
用于转换累积值的可选一元函数。 |
退货
pyspark.sql.Column:应用聚合函数后的最终值。
例子
示例 1:简单减少总和
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([(1, [20.0, 4.0, 2.0, 6.0, 10.0])], ("id", "values"))
df.select(dbf.reduce("values", dbf.lit(0.0), lambda acc, x: acc + x).alias("sum")).show()
+----+
| sum|
+----+
|42.0|
+----+
示例 2:使用 finish 函数减少
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([(1, [20.0, 4.0, 2.0, 6.0, 10.0])], ("id", "values"))
def merge(acc, x):
count = acc.count + 1
sum = acc.sum + x
return dbf.struct(count.alias("count"), sum.alias("sum"))
df.select(
dbf.reduce(
"values",
dbf.struct(dbf.lit(0).alias("count"), dbf.lit(0.0).alias("sum")),
merge,
lambda acc: acc.sum / acc.count,
).alias("mean")
).show()
+----+
|mean|
+----+
| 8.4|
+----+