Я использую пользовательские функции 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()
Я ожидаю, что смогу извлечь изначально возникшую ошибку или, по крайней мере, имя ошибки и / или сообщение об ошибке, не анализируя трассировку стека.