問題
你是磚運行時上運行工作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”),告訴()
解決方案
這是一個已知的問題,可以安全地忽略。
錯誤消息不停止筆記本運行,它不應該導致任何數據丟失。