Vấn đề này đã được đề cập nhiều lần trên StackOverflow:
- Cách cải thiện hiệu suất cho các công việc Spark chậm bằng cách sử dụng kết nối DataFrame và JDBC?
- giới hạn spark jdbc df ... nó đang làm gì?
- Cách sử dụng nguồn JDBC để ghi và đọc dữ liệu trong (Py) Spark?
và trong các nguồn bên ngoài:
vì vậy chỉ để nhắc lại - theo mặc định DataFrameReader.jdbc
không phân phối dữ liệu hoặc đọc. Nó sử dụng một luồng, một exectuor.
Để phân phối các lần đọc:
-
sử dụng phạm vi với
Thuộc tínhlowerBound
/upperBound
:Properties properties; Lower Dataset<Row> set = sc .read() .option("partitionColumn", "foo") .option("numPartitions", "3") .option("lowerBound", 0) .option("upperBound", 30) .option("url", url) .option("dbtable", this.tableName) .option("driver","com.mysql.jdbc.Driver") .format("jdbc") .load();
-
predicates
Properties properties; Dataset<Row> set = sc .read() .jdbc( url, this.tableName, {"foo < 10", "foo BETWWEN 10 and 20", "foo > 20"}, properties )