Pau*_* Wu 9 oracle apache-spark apache-spark-sql spark-dataframe
我们发现,自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());
Run Code Online (Sandbox Code Playgroud)
我们的一位成员试图自定义这部分,他当时改进了很多(Spark 1.3.0).但Spark核心代码的某些部分成为Spark的内部代码,因此在版本之后无法使用.此外,我们看到HADOOP的SQOOP比Spark快得多(但它写入HDFS,需要大量的工作才能转换为数据集以供Spark使用).使用Spark的数据集写入方法写入Oracle似乎对我们有好处.令人费解的是为什么会这样!
小智 7
@Pau Z Wu已经在评论中回答了这个问题,但是问题是,options.put("batchsize", "100000");这是必须的,options.put("fetchsize", "100000");因为获取大小可以一次限制从数据库中检索到的行数,最终会使加载时间更快。
可以在这里找到更多信息:https : //docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |