問題
您正在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()
解決方案
這是一個眾所周知的問題,可以忽略不計。
錯誤消息不會停止筆記本運行,也不應該導致任何數據丟失。