Dieses Problem wurde mehrfach auf StackOverflow behandelt:
- Wie kann die Leistung für langsame Spark-Jobs mit DataFrame- und JDBC-Verbindung verbessert werden?
- spark jdbc df limit... was macht es?
- Wie verwendet man die JDBC-Quelle zum Schreiben und Lesen von Daten in (Py)Spark?
und in externen Quellen:
also nur um es zu wiederholen - standardmäßig DataFrameReader.jdbc
verteilt keine Daten oder liest. Es verwendet Single Thread, Single Exectuor.
So verteilen Sie Lesevorgänge:
-
Verwenden Sie Bereiche mit
lowerBound
/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 )