十進製美元DecimalIsFractional斷言錯誤

使用' round() '或將double類型轉換為十進製會導致' decimal $ decimalisfraction '斷言錯誤。java.lang.AssertionError斷言失敗

寫的saikrishna.pujari

最後發布時間:2022年5月23日

問題

您正在Databricks Runtime 7上運行一個作業。X或以上assertionerror:斷言失敗:Decimal$ decimalisfraction錯誤消息。

堆棧跟蹤:

java.lang.AssertionError: assertion failed: Decimal$DecimalIsFractional while compilation:  during phase: globalPhase=terminal, enteringPhase=jvm庫版本:version 2.12.10編譯器版本:version 2.12.10重構args: -deprecation -classpath .....***警告:跳過126593字節的輸出

此錯誤信息僅在筆記本的第一次運行時出現。後續運行完成,沒有錯誤。

導致

有兩種常見的用例可以觸發此錯誤消息。

  • 原因1:您試圖在筆記本電腦中包含空值的十進製列上使用round()函數。
  • 原因2:您正在筆記本電腦中將雙列轉換為十進製列。

以下示例代碼可用於重現錯誤:

% scala org.apache.spark.sql.functions進口。_進口org.apache.spark.sql.types。_進口org.apache.spark.sql。{DataFrame, SparkSession} import org.apache.spark.sql.Column //包含十進製值的樣本數據val updateData = Seq(Row(BigDecimal.decimal(123.456), Row(BigDecimal.decimal(123.456), 123.456)) val updateSchema = List(StructField("amt_decimal", DecimalType(14,3), true), StructField("amt_double", DoubleType, true)) val testDF = spark。createDataFrame(spark. sparkcontext .parallelize(updateData), StructType(updateSchema)) //原因1:// round() on the Decimal列重現錯誤testDF.withColumn("round_amt_decimal",round(col("amt_decimal"),2)).show() //原因2:// CAST() on the Double column to Decimal列重現錯誤testDF.createOrReplaceTempView("dec_table") spark. withcolumn ("round_amt_decimal",round(col("amt_decimal"),2) .show()sql("select CAST(amt_double AS DECIMAL(3,3)) AS dec_col from dec_table").show()

解決方案

這是一個眾所周知的問題,可以忽略不計。


錯誤消息不會停止筆記本運行,也不應該導致任何數據丟失。