十進製美元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”),告訴()

解決方案

這是一個已知的問題,可以安全地忽略。


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