2016-10-12 33 views
7

Chúng tôi đã tìm thấy dữ liệu tải với API của Spark từ cơ sở dữ liệu Oracle luôn chậm kể từ Spark 1.3 đến Spark 2.0.1 hiện tại. Mã điển hình là một cái gì đó trong Java như thế này:Tại sao Spark Query (Load) từ Oracle lại So Sánh So Sánh với 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()); 

Một trong những thành viên của chúng tôi bao giờ cố gắng để tùy chỉnh phần này và ông được cải thiện rất nhiều tại thời điểm (Spark 1.3.0). Nhưng một số phần của mã lõi Spark đã trở thành nội bộ của Spark nên không thể sử dụng nó sau phiên bản. Ngoài ra, chúng ta thấy SQOOP của HADOOP nhanh hơn nhiều so với Spark cho phần này (nhưng nó ghi vào HDFS, sẽ cần rất nhiều công việc để chuyển đổi thành Dataset để sử dụng Spark). Viết cho Oracle bằng cách sử dụng phương pháp ghi Dataset của Spark có vẻ tốt cho chúng ta. Thật khó hiểu tại sao điều này lại xảy ra!

+1

Got giải pháp: options.put ("batchsize", "100000") nên được thay thế bởi options.put ("fetchsize", "100000"). –

+2

@PauZWu: Thêm như một giải pháp vì nó xứng đáng là –

+0

Xin vui lòng làm @PauZWu Tôi muốn thưởng tiền thưởng :) –

Trả lời

2

Vâng @Pau Z Wu đã trả lời câu hỏi trong phần nhận xét nhưng vấn đề là options.put("batchsize", "100000"); Điều này cần phải là options.put("fetchsize", "100000"); vì tìm nạp các giao dịch kích thước với giới hạn số lượng hàng được lấy từ cơ sở dữ liệu tại một thời điểm và kết thúc tải thời gian nhanh hơn.

Thông tin thêm có thể được tìm thấy ở đây: https://docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm

+0

Vì Pau Z Wu dường như không thích trả lời tiền thưởng là của bạn. –

Các vấn đề liên quan