当前位置: 首页 > 知识库问答 >
问题:

火花 Scala UDF 中的异常处理

欧阳俊逸
2023-03-14
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;)

共有1个答案

西门梓
2023-03-14

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

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)
    }
}
 类似资料:
  • 这个函数的作用是将字符串列解析为键和值的数组。""to。这是我的UDF,它创建了一个包装的int和Double结构元素数组。 有些情况下,输入字符串的格式不正确,我会得到一个错误:输入字符串的< code > Java . lang . numberformatexception :因为“< code>k.trim.toInt”无法转换像“< code>.01-4.1293”这样的脏数据,这是一个

  • 我正在尝试按键对JavaPairRDD进行排序。 块引号

  • 我正在处理UDF中的空值,该UDF在数据帧(源自配置单元表)上运行,该数据帧由浮点数结构组成: 数据帧()具有以下架构: 例如,我想计算x和y的总和。请注意,我不会在以下示例中“处理”空值,但我希望能够在我的udf中检查、或是否。 第一种方法: 如果<code>struct是否为空,因为在scala中<code>浮点不能为空。 第二种方法: 这种方法,我可以在我的udf中检查是否为空,但我可以检查

  • 我有一个用例,我必须以FIFO方式处理事件。这些是从机器生成的事件。每台机器每30秒生成一个事件。对于特定的机器,我们需要根据FIFO FASION对事件进行处理。 我们每天需要处理大约2.4亿个事件。对于如此大的规模,我们需要使用Kafka+火花流 从Kafka文档中,我了解到我们可以使用消息的关键字段将消息路由到特定的主题分区。这确保我可以使用机器id作为密钥,并确保来自特定机器的所有消息都进

  • 请注意,我比程序员更擅长数据挖掘。我试图运行作者Sandy Ryza的书《Spark的高级分析》中的示例(这些代码示例可以从https://github.com/sryza/aas下载),我遇到了以下问题。当我打开这个项目在Intelij的想法,并试图运行它,我得到错误"异常线程"主"java.lang.NoClassDefFoundError: org/apache/火花/rdd/RDD"有人知

  • 问题内容: 我有一个ScheduledThreadPoolExecutor,似乎正在吃异常。如果提交的Runnable引发异常,我希望我的执行者服务通知我。 例如,我希望下面的代码至少输出IndexArrayOutOfBoundsException的stackTrace 作为附带问题。有没有办法为ScheduledThreadPoolExecutor编写常规try catch块? ////////