如何在SparkSQL中捕获转换问题

时间:2018-12-11 11:23:08

标签: apache-spark casting apache-spark-sql

使用SparkSQL版本2.1.1时,故障强制转换会导致目标值设置为(null)。例如以下语句:

spark.sqlContext.sql("SELECT cast(column_1 AS DECIMAL(3, 2) from table")

将导致以下结果:

in:               out:
-------          ----------
| '1' |          | 1.00   |
-------          ----------
| 'b' |          | (null) |
-------          ----------
| '3' |          | 3.00   |
-------          ----------

在这种情况下,我想通过假脱机出现的次数甚至受影响的行号来通知/警告用户。有没有办法做到这一点?

我已经尝试过的是在DataFrame中添加一列,并在每行的所有列上添加MD5总和,以比较源和目标DataFrame。但是,在上面的示例中,由于添加了小数,这将无法正常工作。

1 个答案:

答案 0 :(得分:1)

您可以尝试注册UDF以捕获错误并在投射时调用它。

val customCast = spark.udf.register("numCasting", (x:String) => scala.util.control.Exception.catching(classOf[NumberFormatException]).opt(x.toDouble))

然后在DF中使用它