【问题标题】:When I need to use lambda (and when not) while creating a UDF Pyspark?在创建 UDF Pyspark 时何时需要使用 lambda(以及何时不需要)?
【发布时间】:2021-10-26 20:16:33
【问题描述】:

我不完全明白何时需要在 UDF 的定义中使用 lambda 函数。

我之前的理解是,我需要 lambda 才能让 DataFrame 识别它必须遍历每一行,但我看到很多 UDF 应用程序没有 lambda 表达式。

例如:

我有一个不使用 lambda 的傻函数:

@udf("string")
def unknown_city(s, city):
  if s == 'KS' and 'MI':
    return 'Unknown'
  else: 
    return city


display(df2.
        withColumn("new_city", unknown_city(col('geo.state'), col('geo.city')))
       )

我怎样才能使它与 lambda 一起工作?有必要吗?

【问题讨论】:

  • "我不完全明白何时需要在 UDF 的定义中使用 lambda 函数" lambda 函数从不需要,它是糖

标签: python apache-spark pyspark lambda


【解决方案1】:

Python lambda 只是一种编写函数的方法。查看下面的示例代码,您会发现它们几乎相同,只是 lambda 函数仅适用于一行代码。

带 lambda 函数

from pyspark.sql import functions as F
from pyspark.sql import types as T

df.withColumn('num+1', F.udf(lambda num: num + 1, T.IntegerType())('num')).show()

# +---+-----+
# |num|num+1|
# +---+-----+
# | 10|   11|
# | 20|   21|
# +---+-----+

正常功能

from pyspark.sql import functions as F
from pyspark.sql import types as T

def numplus2(num):
    return num + 2

df.withColumn('num+2', F.udf(numplus2, T.IntegerType())('num')).show()

# +---+-----+
# |num|num+2|
# +---+-----+
# | 10|   12|
# | 20|   22|
# +---+-----+

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 2011-06-13
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多