Поделиться через


уменьшать

Применяет двоичный оператор к исходному состоянию и всем элементам в массиве и сокращает это до одного состояния. Окончательное состояние преобразуется в окончательный результат путем применения функции завершения.

Для соответствующей функции Databricks SQL смотрите функцию reduce.

Синтаксис

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. Сокращение с помощью функции завершения

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|
+----+