【发布时间】:2020-11-14 14:43:18
【问题描述】:
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)
}
}
这个函数的作用是将一列字符串解析为键和值的数组。 “50:63.25,100:58.38”到[[50,63.2], [100,58.38]]。这是我的 UDF,它创建了一个包含 int 和 Double 结构元素的包装数组。
| |-- element: struct (containsNull = true)
| | |-- _1: integer (nullable = false)
| | |-- _2: double (nullable = false)
在某些情况下,输入字符串的格式不正确并且我收到错误:java.lang.NumberFormatException 输入字符串:因为“k.trim.toInt”无法转换像“.01-4.1293”这样的脏数据,这是一个巨大数据集中的异常字符串。谁能帮我解决这个问题?
发生异常时,我想返回一个空数组或带有[0,0.0] 的数组。有什么建议吗?
【问题讨论】:
标签: scala dataframe apache-spark exception user-defined-functions