问题
你是砖运行时上运行工作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”),告诉()
解决方案
这是一个已知的问题,可以安全地忽略。
错误消息不停止笔记本运行,它不应该导致任何数据丢失。