Jar*_*red 5 scala apache-spark apache-spark-sql
我正在测试火花十进制类型的货币量度,并在设置刻度和精度时看到一些奇怪的精度结果,如下所示。我想确保在计算过程中不会丢失任何数据,但是下面的示例不能确保这一点。谁能告诉我为什么Spark sql会发生这种情况?当前版本为2.3.0
val sql = """select cast(cast(3 as decimal(38,14)) / cast(9 as decimal(38,14)) as decimal(38,14)) val"""
spark.sql(sql).show
Run Code Online (Sandbox Code Playgroud)
这返回
+----------------+
| val|
+----------------+
|0.33333300000000|
+----------------+
Run Code Online (Sandbox Code Playgroud)
这是当前未解决的问题,请参阅SPARK-27089。建议的解决方法是调整以下设置。我验证了 SQL 语句在此设置为 false 的情况下按预期工作。
spark.sql.decimalOperations.allowPrecisionLoss=false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |