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

Jak wstawić Huge Pandas Dataframe w tabeli MySQL za pomocą instrukcji Parallel Insert?

Możesz zrobić kilka rzeczy, aby to osiągnąć.

Jednym ze sposobów jest użycie dodatkowego argumentu podczas pisania do sql.

df.to_sql(method = 'multi')

Zgodnie z tą dokumentacją , przekazanie „multi” do argumentu metody umożliwia zbiorcze wstawianie.

Innym rozwiązaniem jest skonstruowanie niestandardowej funkcji wstawiania przy użyciu multiprocessing.dummy.tutaj znajduje się link do dokumentacji :https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.dummy

import math
from multiprocessing.dummy import Pool as ThreadPool

...

def insert_df(df, *args, **kwargs):
    nworkers = 4 # number of workers that executes insert in parallel fashion

    chunk = math.floor(df.shape[0] / nworkers) # number of chunks
    chunks = [(chunk * i, (chunk * i) + chunk) for i in range(nworkers)]
    chunks.append((chunk * nworkers, df.shape[0]))
    pool = ThreadPool(nworkers)

    def worker(chunk):
        i, j = chunk
        df.iloc[i:j, :].to_sql(*args, **kwargs)

    pool.map(worker, chunks)
    pool.close()
    pool.join()

....

insert_df(df, "foo_bar", engine, if_exists='append')

Druga metoda została zasugerowana na https://stackoverflow.com/a/42164138/5614132 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić chiński znak w tabeli mysql?

  2. Przepis bazy danych mysql szefa kuchni nie działa na dużym pliku

  3. Symfony 3.4 Brak klas metadanych do przetworzenia Błąd

  4. Automatyczna kopia zapasowa bazy danych MySQL na serwerze Windows

  5. Jak przechowywać wiele opcji w jednej tabeli?