工作失败当使用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 ())


这篇文章有用吗?