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)