Este problema foi abordado várias vezes no StackOverflow:
- Como melhorar o desempenho de trabalhos lentos do Spark usando DataFrame e conexão JDBC?
- spark jdbc df limit... o que está fazendo?
- Como usar a fonte JDBC para gravar e ler dados no (Py)Spark?
e em fontes externas:
então apenas para reiterar - por padrão
DataFrameReader.jdbc
não distribui dados ou leituras. Ele usa thread único, executor único. Para distribuir leituras:
-
use intervalos comlowerBound
/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 )