所以我试图根据a1中的值有条件地将udf some_function()应用于列b1。 (否则不适用)。使用 pyspark.sql.functions.when(condition,value)和一个简单的udf
some_function = udf(lambda x: x.translate(...))
df = df.withColumn('c1',when(df.a1 == 1, some_function(df.b1)).otherwise(df.b1))
使用此示例数据:
| a1| b1|
---------------
| 1|'text'|
| 2| null|
我看到some_function()总是被评估(即udf在null和crashes上调用translate()),无论 condition 如果 condition 为true,都应用。为了澄清,这不是关于udfs正确处理null,而是当(...)始终执行 value 时,如果 value 是一个udf。
这种行为是否有意?如果是这样,我如何有条件地应用方法,以便在不满足 condition 的情况下不执行该方法?