为什么org.apache.spark.sql.types.DecimalType的最大精度值在SparkSQL中是38?

时间:2016-11-14 09:22:57

标签: java scala apache-spark apache-spark-sql

我正在使用Apache Spark的SQL来处理结构化Bigdata。我特别使用Spark SQL的数据类型,特别是DecimalType,它支持存储的数量比来自sparkSQL的任何其他数据类型要多,但最高可达38精度,即使根据文档:http://spark.apache.org/docs/latest/sql-programming-guide.html#data-types,您可以找到:enter image description here {3}}和它在内部使用Scala语言的BigDecimal,它允许精确约。 2 ^ 32。为什么会这样?

我需要实现scala的BigDecimal和sparkSQL提供的相同功能。我可以了解如何通过这种方式或任何其他方式实现解决方案吗?

1 个答案:

答案 0 :(得分:0)

引擎盖下的火花使用Java的BigDecimal。

https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

  

BigDecimal由   任意精度整数非标度值和32位整数   规模。如果为零或正数,则小数位数是位数   小数点右边。如果为负,则不定比例的值   数乘以十,得出标度的负数。   因此,由BigDecimal表示的数字的值是   (unscaledValue×10-scale)。