#python #apache-spark #pyspark #lambda
Вопрос:
Я не совсем понимаю, когда мне нужно использовать лямбда-функцию в определении UDF.
Мое предыдущее понимание заключалось в том, что мне нужна была лямбда, чтобы фрейм данных распознал, что он должен повторяться по каждой строке, но я видел много приложений UDFS без лямбда-выражения.
Например:
У меня есть глупая функция, которая хорошо работает вот так, без использования лямбды:
@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'))) )
Как я могу заставить его работать с лямбдой? Это необходимо?
Комментарии:
1. «Я не совсем понимаю, когда мне нужно использовать лямбда-функцию в определении UDF» Лямбда-функция никогда не требуется, это сахар
Ответ №1:
Python 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| # --- -----