加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么来自Oracle的Spark查询(加载)与SQOOP相比如此之慢?

发布时间:2020-12-12 15:14:40 所属栏目:百科 来源:网络整理
导读:我们发现,自Spark 1.3到现在的Spark 2.0.1,来自Oracle数据库的Spark API的加载数据一直很慢.典型的代码在 Java中是这样的: MapString,String options = new HashMapString,String(); options.put("url",ORACLE_CONNECTION_URL); options.put("dbtable",dbTa
我们发现,自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,需要大量的工作才能转换为数据集以供Spark使用).使用Spark的Dataset写入方法写入Oracle似乎对我们有好处.令人费解的是为什么会这样!

那么@Pau Z Wu已在评论中回答了问题,但问题是wasoptions.put(“batchsize”,“100000”);这需要是options.put(“fetchsize”,“100000”);因为提取大小涉及限制一次从数据库中恢复的行数,并最终使加载时间更快.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读