【问题标题】:Exception handling in Spark Scala UDFSpark Scala UDF 中的异常处理
【发布时间】:2020-11-13 15:49:11
【问题描述】:
def parse_values(value: String) = {

      val values = value.split(",").map(_.trim)
      values.foldLeft(Array[(Int, Double)]()) {
        case (acc, present) =>
          val Array(k, v) = present.split(",")(0).split(":")
          acc :+ (k.trim.toInt, v.trim.toDouble)

      }

我目前正在使用上述 UDF 将一列字符串解析为键和值数组。 "50:63.25,100:58.38" 到 [[50,63.2], [100,58.38]]。 在某些情况下,字符串是“\N”,我无法解析列值。 如果字符串是 "\N" 那么我应该返回一个空数组。谁能帮我处理这个异常或帮我添加一个新案例?我是 spark-scala 的新手。

错误:scala.MatchError: [Ljava.lang.String;@497cb6a9(属于 [Ljava.lang.String; 类)

【问题讨论】:

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


    【解决方案1】:

    您需要检查生成的 Array 是否有两个元素。您需要这样的模式匹配来避免该解析错误:

    def parse_values(value: String) = {
        val values = value.split(",").map(_.trim)
        values.foldLeft(Array[(Int, Double)]()) {
          case (acc, present) =>
            val Array(k, v) = {
              present.split(",")(0).split(":") match {
                case Array(_) => Array("0", "0.0")
                case arr => arr
              }
            }
            acc :+ (k.trim.toInt, v.trim.toDouble)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 2021-12-07
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2016-05-26
      • 2020-03-08
      相关资源
      最近更新 更多