数据库
首页 > 数据库> > java-Spark SQL sum函数对双精度值的问题

java-Spark SQL sum函数对双精度值的问题

作者:互联网

我们正在尝试使用Spark SQL sum函数对双精度值求和.

样本数据:

+------+
|amount|
+------+
|  1000|
|  1050|
|  2049|
+------+

示例代码:

df.select("amount").show();
df.registerTempTable("table");
sqlContext.sql("select amount/pow(10,2) from table").show();
sqlContext.sql("select sum((amount/pow(10,2))) from table").show();

精度后:

+-----+
|  _c0|
+-----+
| 10.0|
| 10.5|
|20.49|
+-----+

求和后输出:

+------------------+
|               _c0|
+------------------+
|40.989999999999995|
+------------------+

预期的输出为40.99,但是为什么给出的输出为40.989999999999995.

感谢对此的任何帮助.

解决方法:

确保总和评估为decimal(Spark SQL映射).

例如:从表中选择sum(强制转换(数量为小数)/强制转换(pow(10,2)作为十进制)

我建议您将金额转换为十进制类型.

标签:apache-spark-sql,aggregate-functions,java
来源: https://codeday.me/bug/20191026/1932860.html