Ce problème a été traité plusieurs fois sur StackOverflow :
- Comment améliorer les performances des tâches Spark lentes à l'aide de la connexion DataFrame et JDBC ?
- spark jdbc df limit... que fait-il ?
- Comment utiliser la source JDBC pour écrire et lire des données dans (Py)Spark ?
et dans des sources externes :
donc juste pour réitérer - par défaut DataFrameReader.jdbc
ne distribue pas de données ou de lectures. Il utilise un seul thread, un seul exécuteur.
Pour distribuer des lectures :
-
utiliser des plages avec
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 )