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

Java 为什么是org.apache.spark.sql.types.DecimalType';s在SparkSQL中的最大精度值为38?,java,scala,apache-spark,apache-spark-sql,Java,Scala,Apache Spark,Apache Spark Sql,我正在使用ApacheSpark的SQL来处理结构化的大数据。我遇到过Spark SQL数据类型的使用,特别是DecimalType,它比sparkSQL中的任何其他数据类型都支持最大数量的存储,但精度高达38,尽管根据文档:您可以找到:它内部使用Scala语言的BigDecimal,允许精度约为2^32。为什么会这样? 我需要实现scala的BigDecimal与sparkSQL提供的相同功能。我能知道我怎样才能解决这个问题,或者我能尝试的任何其他方法吗 引擎盖下的spark使用Java的Bi

我正在使用ApacheSpark的SQL来处理结构化的大数据。我遇到过Spark SQL数据类型的使用,特别是DecimalType,它比sparkSQL中的任何其他数据类型都支持最大数量的存储,但精度高达38,尽管根据文档:您可以找到:它内部使用Scala语言的BigDecimal,允许精度约为2^32。为什么会这样?


我需要实现scala的BigDecimal与sparkSQL提供的相同功能。我能知道我怎样才能解决这个问题,或者我能尝试的任何其他方法吗

引擎盖下的spark使用Java的BigDecimal

大十进制由 任意精度整数未标度值和32位整数的 规模如果为零或正,则刻度为数字的位数 小数点的右边。如果为负值,则为 这个数字乘以10,等于刻度的反幂。 因此,BigDecimal表示的数字的值为 (未标度值×10标度)


是的,为什么Spark DecimalType的精度限制在38?我试图将MySQL表作为数据帧读入Spark。MySQL表中列的精度被声明为十进制(64,30),这导致了一个异常。@rake您找到解决方案了吗?没有,我不会真正称之为“解决方案”。我记不清了,但不得不求助于一些手工操作,比如读几列作为字符串,扔掉足够多的数字,这样它就可以作为十进制加载。我愿意接受少数坏的价值观。