我們發現使用Spark 1.3的API從Oracle數據庫加載數據一直很慢,因爲Spark 1.3一直到目前的Spark 2.0.1。典型的代碼是什麼在Java中是這樣的:爲什麼Oracle的Spark查詢(加載)與SQOOP相比較慢?
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());
我們的一位成員曾試圖自定義這個部分,他當時(火花1.3.0)提高了很多。但Spark核心代碼的某些部分成爲Spark的內部,因此在版本之後不能使用它。另外,我們看到HADOOP的SQOOP比Spark更快(但它寫入HDFS,需要將大量工作轉換爲Spark使用的數據集)。使用Spark的數據集寫入方法寫入Oracle對我們來說似乎很好。令人費解的是,爲什麼會發生這種事
得到了解決:options.put( 「BATCHSIZE」, 「100000」)應options.put更換( 「FETCHSIZE」, 「100000」)。 –
@PauZWu:作爲一個解決方案添加,因爲它值得 –
請做@PauZWu我想獎勵賞金:) –