问题
砖运行时版本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 ())