Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Converter a tabela mysql para o conjunto de dados Spark é muito lento em comparação com o mesmo do arquivo csv


Este problema foi abordado várias vezes no StackOverflow:

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 com 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
        )