在方法筛选器之间使用时对UDF的PYSPARE连续调用

bn31dyow  于 2022-09-21  发布在  Spark
关注(0)|答案(1)|浏览(135)

当我在DataFrame上调用filter方法并使用between方法作为条件时,我遇到了UDF被连续调用的情况。

UDF

@udf(returnType=FloatType())
def test_udf(value):
    calc = value * 2.00
    return calc

将新列添加到我的df:

df.withColumn("value_of_cash", test_udf(lit(2)))

现在使用between进行过滤:

df = df.filter(
    df.value_of_cash.between(0, df.spending_wise)
)

没有任何错误消息,但我可以从日志中看到,在使用BETWEEN方法调用时,UDF函数被多次调用。

t98cgbkg

t98cgbkg1#

Spark做了懒惰的评估。这意味着它会听你的,什么都不做,继续做,直到你问最后的答案。

在您的示例中,between子句只能在计算列value_of_cash时执行。要计算value_of_cash,它需要运行等于数据行数的UDF次数。对于Spark,UDF是黑盒,因此它愚蠢地计算每一行的UDF。

相关问题