問題
磚運行時版本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 ())