Почему у меня возникает ошибка атрибута при попытке отобразить фрейм данных, в котором есть столбец, созданный функцией UDF? - PullRequest
0 голосов
/ 16 июня 2020

Вот псевдокод:

def is_XYZ(sub1,sub2):
  if sub1==lit("XYZ") | sub2==lit("XYZ"):
    return 1
  else :
    return 0


xyz=F.udf( lambda sub1,sub2:is_XYZ(sub1,sub2),BooleanType())

--- и я пытаюсь создать фрейм данных, как показано ниже:

df=df.withColumn("is_XYZ",xyz(col("sub1"),col("sub2"))).show()

ОШИБКА:

AttributeError: 'NoneType' object has no attribute '_jvm'

    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.handlePythonException(PythonRunner.scala:514)
    at org.apache.spark.sql.execution.python.PythonUDFRunner$$anon$1.read(PythonUDFRunner.scala:81)
    at org.apache.spark.sql.execution.python.PythonUDFRunner$$anon$1.read(PythonUDFRunner.scala:64)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:468) ......

1 Ответ

0 голосов
/ 17 июня 2020

lit является частью api pyspark и не требуется внутри python udf. Достаточно обычного кода python, т.е.

def is_XYZ(sub1,sub2):
  if sub1==lit("XYZ") | sub2==lit("XYZ"):
    return 1
  else :
    return 0

можно заменить на

def is_XYZ(sub1,sub2):
  if((sub1=="XYZ") | (sub2=="XYZ")):
    return 1
  else :
    return 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...