gpt4 book ai didi

oracle - 为什么Oracle的Spark查询(负载)与SQOOP相比这么慢?

转载 作者:行者123 更新时间:2023-12-04 04:09:59 35 4
gpt4 key购买 nike

我们发现从Spark 1.3到当前的Spark 2.0.1以来,从Oracle数据库使用Spark的API加载数据一直很慢。典型的代码在Java中是这样的:

        Map<String, String> options = new HashMap<String, String>();
options.put("url", ORACLE_CONNECTION_URL);
options.put("dbtable", dbTable);
options.put("batchsize", "100000");
options.put("driver", "oracle.jdbc.OracleDriver");

Dataset<Row> jdbcDF = sparkSession.read().options(options)
.format("jdbc")
.load().cache();
jdbcDF.createTempView("my");

//= sparkSession.sql(dbTable);
jdbcDF.printSchema();
jdbcDF.show();

System.out.println(jdbcDF.count());

我们的一位成员曾经尝试过自定义此部分,并且当时他做了很多改进(Spark 1.3.0)。但是,Spark核心代码的某些部分已成为Spark的内部组件,因此在版本之后无法使用。此外,对于这部分,我们看到HADOOP的SQOOP比Spark快得多(但是它写入HDFS,这需要大量的工作才能转换为Dataset以供Spark使用)。使用Spark的Dataset写入方法向Oracle写入对我们来说似乎是件好事。令人困惑的是为什么会这样!

最佳答案

好吧,@ Pau Z Wu已经在注释中回答了问题,但是问题是options.put("batchsize", "100000");这必须是options.put("fetchsize", "100000");,因为访存大小可处理一次限制从数据库中检索到的行数,最终将使加载时间更快。

可以在这里找到更多信息:https://docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm

关于oracle - 为什么Oracle的Spark查询(负载)与SQOOP相比这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40007997/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com