org.apache.spark.SparkException:无法执行用户定义的函数(如何查找有问题的udf)

时间:2019-05-01 01:25:48

标签: apache-spark

我正尝试从不再使用大量UDF的组织中的开发人员调试代码

  

org.apache.spark.SparkException:无法执行用户定义的   功能

但是错误仅显示有问题的udf的名称

  

$ anonfun $ 1 :(字符串,字符串)=>字符串

如何查找出现问题的函数的名称?是否有从$ anonfun $ 1到函数名的映射?

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)