【问题标题】:Failed to execute user defined function in Spark-Scala无法在 Spark-Scala 中执行用户定义的函数
【发布时间】:2021-12-18 02:48:04
【问题描述】:

下面是将多值列转换为映射的UDF。

def convertToMapFn (c: String): Map[String,String] = {
  val str = Option(c).getOrElse(return Map[String, String]())
  val arr = str.split(",")
  val l = arr.toList
  
  val regexPattern = ".*(=).*".r
  
  s"$c".toString match {
    case regexPattern(a) => l.map(x => x.split("=")).map(a => {if(a.size==2) (a(0).toString -> a(1).toString) else "ip_adr" -> a(0).toString} ).toMap
    case "null" => Map[String, String]()
  }
}

val convertToMapUDF = udf(convertToMapFn _)

我可以显示数据,但是在尝试将数据插入 Delta 表时,出现以下错误。

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 9 in stage 97.0 failed 4 times, most recent failure: Lost task 9.3 in stage 97.0 (TID 2561, 10.73.244.39, executor 5): org.apache.spark.SparkException: Failed to execute user defined function($read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$Lambda$2326/1884779796: (string) => map<string,string>)

Caused by: scala.MatchError: a8:9f:e (of class java.lang.String)

at line396de0100d5344c9994f63f7de7884fe49.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.convertToMapFn

Caused by: org.apache.spark.SparkException: Failed to execute user defined function($read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$Lambda$2326/1884779796: (string) => map<string,string

有人可以告诉我如何解决这个问题。谢谢

【问题讨论】:

    标签: scala apache-spark user-defined-functions


    【解决方案1】:

    您可以在错误消息中看到您有一个MatchError。当您没有考虑所有可能的匹配情况时,就会发生这种情况。一个基本的解决方法是将case "null" =&gt; 更改为case _ =&gt;,这将匹配正则表达式不匹配的任何内容。

    其他事项:

    • 在这种情况下,s"$c".toString 相当于写成c
    • 我认为你的意思是匹配 str 而不是 c

    【讨论】:

    • 谢谢。有效。我将 s"$c".toString 更改为 s"$c"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2019-08-27
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多