pyspark udf печать анализируемая строка - PullRequest
0 голосов
/ 18 января 2019

У меня проблема внутри функции pyspark udf, и я хочу напечатать номер строки, генерирующей проблему.

Я попытался посчитать строки, используя эквивалент статической переменной в Python, но она не работает:

import pyspark.sql.functions as F
def myF(input):
    myF.lineNumber += 1
    if (somethingBad):
        print(myF.lineNumber)
    return res

myF.lineNumber = 0

myF_udf =  F.udf(myF, StringType())

Как мне посчитать строку внутри pyspark udf?

1 Ответ

0 голосов
/ 18 апреля 2019

udfs выполняются на рабочих, поэтому операторы print внутри них не будут отображаться в выходных данных (которые получены от драйвера). Лучший способ справиться с проблемами с UDF - это изменить тип возвращаемого значения UDF на структуру или список и передать информацию об ошибке вместе с возвращенным выводом. В приведенном ниже коде я просто добавляю информацию об ошибке в строку res, которую вы возвращали изначально.

import pyspark.sql.functions as F
def myF(input):
  myF.lineNumber += 1
  if (somethingBad):
    res += 'Error in line {}".format(myF.lineNumber)
  return res

myF.lineNumber = 0

myF_udf =  F.udf(myF, StringType())
...