是否在PySpark UDF中使用lambda

时间:2018-07-14 19:37:09

标签: lambda pyspark

在PySpark中使用lamdba函数有什么好处?这是一个示例:

def square(x):
    return float(x**2)

我用lambda尝试了这个:

f_square = udf(lambda x: square(x), FloatType())
result_w_square = result.withColumn('square', f_square(result.x))

在没有lambda的情况下,我尝试了此操作:

f_square = udf(square, FloatType())
result_w_square2 = result.withColumn('square', f_square(result.x))

我得到了相同的结果。哪种方法更好?

1 个答案:

答案 0 :(得分:2)

withColumn和其他Spark Python API函数旨在采用python表达式在远程计算机上运行相同的表达式。

但是,Python函数只能将对象作为参数,而不能将表达式作为参数。要将表达式作为对象处理,唯一的方法是编写一个包含表达式的函数。在Python中,该函数是第一类对象。

但是,如果您不重用表达式,则每次编写函数都会很麻烦。使用lambda,您可以编写没有任何函数定义的匿名函数。在许多情况下,编写lambda表达式可能很简洁。

因此,根据您是否重复使用表达式,可以选择任何一种方式。