Как я могу перевести этот UDF на Pandas UDF - PullRequest
0 голосов
/ 23 января 2020

Я сталкиваюсь с некоторыми проблемами производительности с этой функцией, которая стремится вернуть True, если строка массива строк совпадает с параметром val. Я хотел бы перевести это в Pandas UDF.

def list_contains(val):
    # Perfom what ListContains generated
  def list_contains_udf(column_list):
    for element in column_list:
      if element.startswith(val):
        return True
    return False
  return udf(list_contains_udf, BooleanType())

Как мне этого добиться?

1 Ответ

0 голосов
/ 24 января 2020

Вдохновленный комментарием @ jx c, попробуйте использовать sql ниже в ячейке блоков данных.

%sql
SELECT exists(column_list, element -> substr(element, 1, length(val)) == val)

Код element.startswith(val) Я понимаю, что с помощью SQL нужно взять длина головы N (length(val)) строки element с использованием substr и равняется ли val self.

В противном случае, пожалуйста, обратитесь к классу pyspark.sql.UDFRegistration(sparkSession) документа PySpark, чтобы зарегистрировать схожие функции как UDF для их совместного использования.

...