Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konwersja tabeli mysql do zestawu danych Spark jest bardzo powolna w porównaniu do tego samego z pliku csv

Ten problem został omówiony wielokrotnie na StackOverflow:

oraz w źródłach zewnętrznych:

więc powtórzę - domyślnie DataFrameReader.jdbc nie dystrybuuje danych ani odczytów. Używa jednego wątku, jednego wykonawcy.

Aby rozpowszechniać odczyty:

  • użyj zakresów z 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
        )
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy ten diagram ER powinien zamiast tego używać relacji trójskładnikowej?

  2. Czy silnik MySQL InnoDB prowadzi jakąkolwiek optymalizację wydajności dla transakcji tylko do odczytu?

  3. Jak zmienić pozycję kolumny tabeli MySQL bez utraty danych kolumn?

  4. Pole liczb całkowitych MySQL jest zwracane jako ciąg znaków w PHP

  5. Jak wybrać rekord zawierający MAX(jakieś_pole) w grupie (grupuj według)