当我在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函数被多次调用。
1条答案
按热度按时间t98cgbkg1#
Spark做了懒惰的评估。这意味着它会听你的,什么都不做,继续做,直到你问最后的答案。
在您的示例中,
between
子句只能在计算列value_of_cash
时执行。要计算value_of_cash
,它需要运行等于数据行数的UDF次数。对于Spark,UDF是黑盒,因此它愚蠢地计算每一行的UDF。