使用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。但是,在上面的示例中,由于添加了小数,这将无法正常工作。
答案 0 :(得分:1)
您可以尝试注册UDF以捕获错误并在投射时调用它。
val customCast = spark.udf.register("numCasting", (x:String) => scala.util.control.Exception.catching(classOf[NumberFormatException]).opt(x.toDouble))
然后在DF中使用它