Как получить исходную ошибку Python из ошибки Py4JJavaError, возникшей в пользовательской функции PySpark - PullRequest
0 голосов
/ 25 апреля 2019

Я использую пользовательские функции PySpark для выполнения кода на работнике Spark. Если исключение возникает в UDF, оно помещается в Py4JJavaError и повторно вызывается в Python. Чтобы правильно обработать ошибку, мне нужна оригинальная ошибка. Есть ли способ получить его от Py4JJavaError?

Строковое представление исходной ошибки печатается как часть трассировки стека, так что было бы возможно получить хотя бы тип ошибки, анализируя трассировку. Однако это было бы утомительно и подвержено ошибкам.

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql.functions import udf

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame(pd.DataFrame({"A": [1, 2, 3]}))

@udf
def test(x):
    raise ValueError(f"Got {x}")

df = df.withColumn("B", test("A"))
df.show()

Я ожидаю, что смогу извлечь изначально возникшую ошибку или, по крайней мере, имя ошибки и / или сообщение об ошибке, не анализируя трассировку стека.

...