我正尝试从不再使用大量UDF的组织中的开发人员调试代码
org.apache.spark.SparkException:无法执行用户定义的 功能
但是错误仅显示有问题的udf的名称
$ anonfun $ 1 :(字符串,字符串)=>字符串
如何查找出现问题的函数的名称?是否有从$ anonfun $ 1到函数名的映射?
答案 0 :(得分:1)
Scala DSL中的UDF没有运行时名称。考虑以下示例:
val f = udf((_: Int) / 0)
Seq(1)
.toDF("foo")
.select(f($"foo"))
.show()
Spark不知道函数f
。但是,完整的堆栈跟踪揭示了错误的来源,该错误由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)