工作失敗當使用Spark-Avro十進製值寫入AWS紅移

學習如何解決工作失敗在編寫十進製值與Spark-Avro AWS紅移。

寫的亞當Pavlacka

去年發表在:2022年5月31日

問題

磚運行時版本5。x和上麵寫小數的時候出現亞馬遜紅移使用Spark-Avro作為默認臨時文件格式,寫操作失敗的例外:

錯誤(代碼1207),數據加載到紅移:“無效的數字,價值”,Pos 0,類型:小數”

或寫操作寫零位的十進製值。

導致

寫作時紅移,數據首先存儲在臨時文件夾在S3中之前加載到紅移。默認格式用於存儲臨時數據之間Spark-Avro Apache火花和紅移。然而,Spark-Avro商店作為一個二進製小數,由紅移解釋為空字符串或null。

解決方案

臨時文件格式更改為CSV使用tempformat選擇。您可以使用該示例Scala代碼:

% scala / /創建樣本數據情況下類createDec(價值:BigDecimal) val df = Seq (createDec (45.24))。托德/ /寫紅移(df。寫.format (com.databricks.spark.redshift) .option (“url”, jdbcUrl) .option (“tempdir”, tempdir) .option .option(“數據表”,“testtable”) (“aws_iam_role”、“your_aws_iam_role”) .option .mode (“tempformat”、“CSV”)(“追加”).save ())