org.apache.spark.SparkException: не удалось выполнить пользовательскую функцию (как найти udf с проблемой) - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь отладить код от разработчика, который больше не работает в организации, использующей много UDF, и он терпит неудачу с

org.apache.spark.SparkException: не удалось выполнить определенный пользователем функция

Но ошибка не показывает имя udf с проблемами, только

$ anonfun $ 1: (строка, строка) => строка

Как я могу найти название функции, имеющей проблемы? Есть ли что-то вроде сопоставления $ anonfun $ 1 с именем функции?

1 Ответ

1 голос
/ 01 мая 2019

UDF в Scala DSL не имеют имени времени выполнения.Рассмотрим это, например:

val f = udf((_: Int) / 0)
Seq(1)
  .toDF("foo")
  .select(f($"foo"))
  .show()

Функция f не известна Spark.Однако при полной трассировке стека выявляется источник ошибки, который передается в свойстве cause SparkException

Failed to execute user defined function(SqlTest$$Lambda$547/666911607: (int) => int)
org.apache.spark.SparkException: Failed to execute user defined function(SqlTest$$Lambda$547/666911607: (int) => int)
    at org.apache.spark.sql.catalyst.expressions.ScalaUDF.eval(ScalaUDF.scala:1066)
    at org.apache.spark.sql.catalyst.expressions.If.eval(conditionalExpressions.scala:63)
...
Caused by: java.lang.ArithmeticException: / by zero
    at lab.SqlTest.$anonfun$new$2(SqlTest.scala:28)
    at scala.runtime.java8.JFunction1$mcII$sp.apply(JFunction1$mcII$sp.java:23)
    at org.apache.spark.sql.catalyst.expressions.ScalaUDF.$anonfun$f$2(ScalaUDF.scala:109)
    at org.apache.spark.sql.catalyst.expressions.ScalaUDF.eval(ScalaUDF.scala:1063)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...