Когда мне нужно использовать лямбду (а когда нет) при создании UDF-парка?

#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| #  --- -----