sql >> Database teknologi >  >> RDS >> Mysql

Hvordan indsætter man Kæmpe Pandas Dataframe i MySQL-tabel med Parallel Insert Statement?

Du kan gøre et par ting for at opnå det.

En måde er at bruge et ekstra argument, mens du skriver til sql.

df.to_sql(method = 'multi')

Ifølge denne dokumentation , ved at sende 'multi' til metodeargumentet kan du masseindsætte.

En anden løsning er at konstruere en brugerdefineret indsættelsesfunktion ved hjælp af multiprocessing.dummy.her er linket til dokumentationen: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')

Den anden metode blev foreslået på https://stackoverflow.com/a/42164138/5614132 .




  1. Ændring af det genererede navn på en fremmednøgle i Hibernate

  2. Hvordan tæller jeg unikke besøgende på mit websted?

  3. Kumulativ total i MS SQL server

  4. Har du problemer med MS Access Crashing? Prøv disse løsninger først