Оценка аргументов PySpark UDF во время выполнения

#python #apache-spark #pyspark

#python #apache-spark #pyspark

Вопрос:

У меня есть udf, зарегистрированный в pyspark, которому поручено запрашивать веб-страницы путем создания URL-адреса с использованием аргументов функции a и b. Во время выполнения он оценивает аргументы Column<b'(colA colB)'> at в инструкции print.

Как мне добраться до строки в аргументах a и b?

 def udf_func(a, b):
    print(a   b)
    return requests.get(a   b)

get = udf(udf_func, ByteType())
df = df.withColumn("output", get(col("colA"), col("colB")))

 

Спасибо

Ответ №1:

вы можете изменить свою функцию следующим образом :

 def udf_func(a, b): return requests.get(a   b)

get = udf(lambda a,b : udf_func(a,b), ByteType())
df = df.withColumn("output", get(col("colA"), col("colB")))
 

Я не верю, что вы можете печатать значения внутри udf, поэтому я удалил его, но это должно сработать для вас.

Комментарии:

1. Привет, спасибо за вашу помощь! Как ни странно, это решение не сработало для меня, поскольку оно оставило spark работать бесконечно. Мне удалось найти другой способ обойти использование concat

2. Если вы можете избежать использования UDF, пожалуйста, сделайте это. Как вы заметили, на больших наборах данных они определенно замедляют выполнение. Лучше всего использовать spark DataFrame или SQL API для вашего кода