【问题标题】:Performance comparison cx_oracle vs write.format('jdbc')性能比较 cx_oracle 与 write.format('jdbc')
【发布时间】:2022-01-18 14:47:23
【问题描述】:

谁能告诉我在 oracle 中插入哪种方式更高效?

Write.format('jdbc') 模式还是使用CX_Oracle?

在我的项目中,我遇到了他们使用 write.format('jdbc') 插入和 CX_Oracle 更新的情况,所以我正在考虑在同一个 CX_Oracle 连接上更改为插入和更新,你怎么看?

【问题讨论】:

  • AFAIK(我可能不正确),最好在使用 pyspark 时使用 df.write.format('jdbc'),而 cx_oracle 仅对 pandas 数据帧有帮助。单独使用 oracle(不需要 df)时,cx_oracle 将帮助您直接在数据库中执行 sql 查询,而无需在 pyspark 环境中读取它。
  • 我最近处理了一个类似的案例(免责声明:我为 Oracle 工作),并且 cx_Oracle 并不比使用 JDBC 写入快。客户最终同时使用了两者,但 cx_Oracle 仅用于行级插入更新和删除。
  • 在较低级别,cx_Oracle 的executeMany() 对于插入或更新非常高效。我不知道这是如何通过 spark 访问的。

标签: python apache-spark pyspark apache-spark-sql


【解决方案1】:

我曾研究过类似的用例。以下是我上一个项目的一些收获。

  1. cx_oraclewrite.format('jdbc') 相比非常慢。我正在插入 1M 条记录,这两种方法之间存在巨大差异。 cx_oracle 即使使用 executeMany 也无济于事。我强烈推荐使用 spark JDBC。

  2. 即使在更新的情况下,我最终还是执行了删除(SQL 查询)-插入(使用 pyspark),因为无法在 spark 中实现更新,而且替代方案非常慢。

  3. Spark 在插入数据库时​​也会进行并行写入。

  4. 即使是读取操作也使用 spark jdbc read,因为 spark 会优化作业并直接在 DB 发送投影和过滤。

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2011-06-10
    • 2017-08-09
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多