投射不兼容的 DecimalType 与 ClassCastException 时的 Apache Spark Null 值

ale*_*oid 6 casting scala apache-spark

铸造DecimalType(10,5) 例如99999.99999DecimalType(5,4) 在 Apache Spark 中静默返回null

在这种情况下,是否可以更改此行为并允许 Spark 抛出异常(例如某些 CastException)并使作业失败而不是静默返回null

Gla*_*tor 0

根据 Git 中心文档,https://github.com/apache/spark/blob/3ab96d7acf870e53c9016b0b63d0b328eec23bed/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala#L499

/** * 将给定小数中的精度/小数位数更改为decimalType(如果有)中设置的精度/小数位数,* 如果溢出则返回 null,或者value就地修改并在成功时返回。* * 注意:这会value就地修改,因此不要在外部数据上调用它。*/

还有另一个线程,表明如果无法强制转换,可能没有直接方法使代码失败。Spark:转换小数而不更改列的可为空属性。那么,也许您可​​以尝试检查null强制转换列中的值并创建一个失败的逻辑(如果有)?