十进制美元DecimalIsFractional断言错误

使用“圆()”或套管双十进制的结果在一个十进制DecimalIsFractional美元的断言错误。. lang。AssertionError断言失败

写的saikrishna.pujari

去年发表在:2022年5月23日

问题

你是砖运行时上运行工作7。当你得到一个x或以上. lang。AssertionError:断言失败:小数DecimalIsFractional美元错误消息。

堆栈跟踪:

. lang。AssertionError:断言失败:小数DecimalIsFractional美元,编译:<笔记本>阶段:globalPhase =终端,enteringPhase = jvm库版本:版本2.12.10编译器版本:版本2.12.10重构参数:弃用类路径.....* * *注意:跳过126593字节输出* * *

这个错误消息只发生在第一次运行你的笔记本。随后的运行没有错误。

导致

有两种常见用例可以触发这个错误消息。

  • 原因1:你想使用十进制的圆()函数列包含空值在一个笔记本。
  • 原因2:你是铸造双柱小数列一个笔记本。

这个示例代码可以用来复制错误:

% scala org.apache.spark.sql.functions进口。_进口org.apache.spark.sql.types。_进口org.apache.spark.sql。{DataFrame, SparkSession} org.apache.spark.sql进口。用十进制值列/ /样本数据val updateData = Seq(行(BigDecimal.decimal(123.456), 123.456)、行(BigDecimal.decimal (123.456), 123.456)) val updateSchema =列表(StructField (“amt_decimal DecimalType(14日3),真的),StructField (“amt_double”,倍增式,真))val testDF =火花。createDataFrame (spark.sparkContext.parallelize (updateData) StructType (updateSchema)) / /原因1:/ /轮()小数列复制错误testDF.withColumn (“round_amt_decimal”轮(col (“amt_decimal”), 2)),告诉()/ /原因2:/ / CAST()在双柱十进制繁殖错误testDF.createOrReplaceTempView (dec_table)火花。sql(“选择(amt_double小数(3、3))从dec_table dec_col”),告诉()

解决方案

这是一个已知的问题,可以安全地忽略。


错误消息不停止笔记本运行,它不应该导致任何数据丢失。

这篇文章有用吗?