【发布时间】:2021-05-23 04:50:43
【问题描述】:
Spark jdbc 写入会给具有更多列(400 列和 200 行)的数据带来噩梦,即使列更少而行更多,它也需要很长时间(20 万条记录需要 30 到 60 分钟)。我们没有用于分区的主键,因此将使用很少的相关键(从 jdbc/transformations 读取没有问题,只有写入有问题)。
- Spark Cluster conf -- 1 个 master,2 个 worker >> 8 个核心,每个 32 Gb。
- Spark sumit 命令参数 -- 'executor_cores': 2,'executor_memory': '2G','num_executors': 2,'driver_memory': '2G'
根据其他 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 是个问题(两者均已验证)。 我找不到太多选择。
【问题讨论】: