首页 > 解决方案 > jdbc 写入 greenplum/postgres 问题

问题描述

Spark jdbc 写入为具有更多列(400 列和 200 行)的数据带来了噩梦,即使列更少而行更多,它也需要很长时间(200k 记录 30 到 60 分钟)。我们没有用于分区的主键,因此将使用很少的相关键(从 jdbc/transformations 读取没有问题,只有写入有问题)。

根据其他stackoverflow建议尝试以下方式。

df.write.format('jdbc').options(url=url,driver=driver,dbtable=table,user=user,password=password,batchsize=20000,rewriteBatchedStatements=true).mode(mode).save()
df.repartition(15).write.format('jdbc').options(url=url,driver=driver,dbtable=table,user=user,password=password,batchsize=20000,rewriteBatchedStatements=true).mode(mode).save()

写入 mysql 工作正常。写入 greenplum 和 postgres 是个问题(两者均已验证)。我找不到太多选择。

标签: jdbcpysparkgreenplum

解决方案


经过反复试验,发现了一些有助于提高性能的参数。

  1. 对于 Postgres,应使用 reWriteBatchedInserts=true 而不是 rewriteBatchedStatements=true(这仅适用于 mysql)。这对性能有很大帮助。
  2. 减少批量有助于写入数据库。通过反复试验,我们可以确定适合环境的价值。

推荐阅读