阅读文档,星火DataType BigDecimal(精度,比例尺)意味着
所以当我将一个值转换为十进制时
scala> val sss = """select cast(1.7142857343 as decimal(9,8))"""
scala> spark.sql(sss).show
+----------------------------------+
|CAST(1.7142857343 AS DECIMAL(9,8))|
+----------------------------------+
| 1.71428573| // It has 8 decimal digits
+----------------------------------+但是,当我将值转换到10.0以上时,就会得到NULL
scala> val sss = """select cast(12.345678901 as decimal(9,8))"""
scala> spark.sql(sss).show
+----------------------------+
|CAST(11.714 AS DECIMAL(9,8))|
+----------------------------+
| null|
+----------------------------+我预计结果将是12.3456789,
为什么它是空的?为什么精度不是implemented??
发布于 2019-09-28 03:43:54
为了在内部转换十进制火花,提供的模式小数点(9,8)大于12.345678901实际模式小数(11,9)。如果是,这意味着数字可以安全地转换到提供的模式中,而不会丢失任何精度或范围。看看org.apache.spark.sql.types.DecimalType.isWiderThan()
但是,在上述情况下,不能将十进制(11,9)转换为十进制(9,8),因此它将返回null。
//MAX_PRECISION = 38
val sss = """select cast(12.345678901 as decimal(38,7))"""
spark.sql(sss1).show(10)
+-----------------------------------+
|CAST(12.345678901 AS DECIMAL(38,8))|
+-----------------------------------+
| 12.3456789|
+-----------------------------------+https://stackoverflow.com/questions/58142233
复制相似问题