将 Spark 数据帧写入 Azure Sql Server 会间歇性地导致重复记录

问题描述 投票:0回答:1

我们使用 JDBC 选项将 Spark DataFrame 中转换后的数据插入到 Azure SQL Server 中的表中。以下是我们用于此插入的代码片段。然而,我们在少数情况下注意到目标表中的某些记录是重复的。对于大表来说会发生这种情况。例如如果一个DataFrame有600K条记录,向表中插入数据后,我们会得到大约620K条记录。这种情况非常罕见,但我们仍然想了解为什么会发生这种情况。

DataToLoad.write.jdbc(url = jdbcUrl, table = targetTable, mode = "overwrite", properties = jdbcConnectionProperties)

我们能想到的唯一原因是,虽然插入是以分布式方式进行的,但如果其中一个执行器在中间失败,它们就会被重新尝试,并且可能会插入重复的记录。这可能完全没有意义,只是为了看看这是否会成为一个问题。

apache-spark pyspark azure-databricks
1个回答
0
投票

某些记录面临同样的问题,并在写入 SQL Server 之前使用分区数据帧修复了该问题。

您可以使用以下代码作为参考:

DataToLoad.coalesce(1).write.jdbc(url = jdbcUrl, table = targetTable, mode = "overwrite", properties = jdbcConnectionProperties)

SQL Server 中添加重复记录的原因尚不清楚,但怀疑可能是由于集群配置问题。

© www.soinside.com 2019 - 2024. All rights reserved.