gpt4 book ai didi

python - 如何在没有UDF的情况下如何计算PySpark数据帧中数组列中的尾随零

转载 作者:行者123 更新时间:2023-12-04 13:30:23 27 4
gpt4 key购买 nike

我有一个带有固定数量的整数的数组的列的数据框。
如何在df中添加包含数组中尾随零的数量的列?
我想避免使用UDF以获得更好的性能。

例如,输入df:

>>> df.show()
+------------+
| A|
+------------+
| [1,0,1,0,0]|
| [2,3,4,5,6]|
| [0,0,0,0,0]|
| [1,2,3,4,0]|
+------------+

和通缉的输出:
>>> trailing_zeroes(df).show()
+------------+-----------------+
| A| trailingZeroes|
+------------+-----------------+
| [1,0,1,0,0]| 2|
| [2,3,4,5,6]| 0|
| [0,0,0,0,0]| 5|
| [1,2,3,4,0]| 1|
+------------+-----------------+

最佳答案

从Spark 2.4开始,您可以使用高阶函数AGGREGATE来做到这一点:

from pyspark.sql.functions import reverse

(
df.withColumn("arr_rev", reverse("A"))
.selectExpr(
"arr_rev",
"AGGREGATE(arr_rev, (1 AS p, CAST(0 AS LONG) AS sum), (buffer, value) -> (if(value != 0, 0, buffer.p), if(value=0, buffer.sum + buffer.p, buffer.sum)), buffer -> buffer.sum) AS result"
)
)

假设 A是带有数字的数组。这里只是注意数据类型。假设数组中的数字也很长,我正在将初始值转换为 LONG

关于python - 如何在没有UDF的情况下如何计算PySpark数据帧中数组列中的尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com