下面是示例测试代码及其输出。我看到java bigDecimal存储了所有数字,因为scala BigDecimal失去了精度,并进行了四舍五入,而spark也发生了同样的情况。有没有办法设置精度或说永不舍入。无论如何我都不想截断或舍入
val sc = sparkSession
import java.math.BigDecimal
import sc.implicits._
val bigNum : BigDecimal = new BigDecimal(0.02498934809987987982348902384928349)
val convertedNum: scala.math.BigDecimal = scala.math.BigDecimal(bigNum)
val scalaBigNum: scala.math.BigDecimal = scala.math.BigDecimal(0.02498934809987987982348902384928349)
println("Big num in java" + bigNum)
println("Converted " + convertedNum)
println("Big num in scala " + scalaBigNum)
val ds = List(scalaBigNum).toDS()
println(ds.head)
println(ds.toDF.head)
输出
答案 0 :(得分:0)
基于spark.apache.org/docs
此处:https://www.scala-lang.org/api/2.12.5/scala/math/BigDecimal.html
但是,如果您希望以简单的方式将其转换为String
,
转换为DF or DS
以获得精确值。 :)
请尝试一下:)