首页 > 解决方案 > 使用 jdbc slow 将 Spark 数据帧写入数据库(Exasol)

问题描述

我正在从 AWS(s3) 读取并写入数据库 (exasol) 花费了太多时间,即使设置批量大小不会影响性能。我正在写 618 万行(大约 3.5 GB),耗时 17 分钟

在集群模式下运行 20 节点集群

我怎样才能让它快

数据集 ds = session.read().parquet(s3Path)

ds.write().format("jdbc").option("user", username).option("password", password).option("driver", Conf.DRIVER).option("url", dbURL) .option("dbtable", exasolTableName).option("batchsize", 50000).mode(SaveMode.Append).save();

标签: apache-sparkjdbcapache-spark-sql

解决方案


好的,这是一个有趣的问题。

我没有检查最近发布的 Spark 连接器的实现细节。但是您可以使用一些以前存在的方法。

  1. 在 Hadoop 中将 Spark 作业结果保存为 CSV 文件。通过 WebHDFS http 调用从所有创建的文件运行标准并行导入。
  2. 据我所知,官方UDF 脚本能够直接从 Parquet 导入。
  3. 您可以实现自己的 Java UDF 脚本以按照您想要的方式读取 Parquet。例如,这就是它对ORC 文件的工作方式。

一般来说,实现某些实际性能的最佳方法是完全绕过 Spark。


推荐阅读