如何将ifthen表达式添加到用户定义函数中?

2024-09-27 07:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python Spark中有一个用户定义的函数:

result = udf(lambda num1, num2:  (num1 - num2) / math.sqrt(1-(num1/num2)), FloatType())

我想添加一个num1/num2大于1的检查。如果它小于1,那么num1应该等于num2。你知道吗

if (num1/num2 > 1): 
        num1 = num2

如何将这个简单的检查添加到udf表达式中?你知道吗

我试过了,但似乎失败了:

def calculate(num1, num2):
    if (num1/num2 > 1): 
        num1 = num2
    result = (num1 - num2) / math.sqrt(1-(num1/num2))
    return result   
calc_z = udf(lambda num1, num2: calculate, FloatType())

Tags: lambda函数用户if定义表达式mathsqrt
3条回答

您可以使用where函数获得如下结果

df.withColumn("result", when(($"num1" / $"num2") < 1, $"num2")
  .otherwise($"num1"))

与其使用自定义项,不如使用可用函数。你知道吗

如果你还想使用自定义项,你可以注册你的自定义项以上作为

calc_z = udf(calculate, FloatType())

希望这有帮助!你知道吗

如果将num1替换为:

(num2 if num1/num2 > 1 else num1)

您的lambda正在返回一个尚未调用的函数。试试这个。你知道吗

def calculate(num1, num2):
    if (num1/num2 > 1): 
        num1 = num2
    result = (num1 - num2) / math.sqrt(1-(num1/num2))
    return result   
calc_z = udf(calculate, FloatType()) # Changed this line

相关问题 更多 >

    热门问题