首页 > 解决方案 > 将 python 函数转换为 pyspark lambda 函数

问题描述

我有一个如下的python函数

def func(a, b, c):
    if c != 0:
        return b/c * a
    else:
        return a

我想为此创建一个 lambda 函数 我已尝试创建一个如下所示的 lambda 函数

 func = lambda x,y,z : y/z * x if z != 0 else z

但出现错误

TypeError:不支持的操作数类型/:'str'和'str'

这就是我打电话的方式

df= df.withColumn('new_col' ,func('x', 'y', 'z'))

即使我尝试将列转换为浮动,但仍然遇到问题。

注意:我不希望它被创建为 UDF,因为我正在处理一个庞大的数据集,而 UDF 需要花费大量时间,因此需要寻找 Lambda 函数

标签: pythondataframelambdapyspark

解决方案


你调用你的lambda函数是错误的。

你传递 3 个字符串而不是数字变量,你应该传递x//而不是调用字符串的值yz您可能应该执行以下操作:

df= df.withColumn('new_col' ,func($'x', $'y', $'z'))
# Or
df= df.withColumn('new_col' ,func(df['x'], df['y'], df['z']))

但是,如果您不共享数据框结构,我无法确定。

密切注意错误消息。它清楚地表明您传递给函数的变量是字符串,您不能对字符串执行算术运算。


推荐阅读