Quale sarebbe il modo più efficiente per inserire milioni di record dire 50 milioni da un frame di dati Spark a Tabelle Postgres. In passato l' ho fatto da Spark a MSSQL facendo uso dell'opzione di copia bulk e dimensione batch che ha avuto successo.
C'è qualcosa di simile che può essere qui per Postgres?
Aggiunta del codice che ho provato e tempo impiegato per eseguire il processo:
def inserter():
start = timer()
sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\
.option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \
.option("dbtable", "public.full_load").option("user", "root").option("password", "password").save()
end = timer()
print(timedelta(seconds=end-start))
inserter()
Quindi ho seguito l'approccio sopra descritto per 10 milioni di record e avevo 5 connessioni parallele come specificato in numPartitions
e ho anche provato una dimensione batch di 200k .
Il tempo totale impiegato per il processo è stato 0: 14: 05.760926 (quattordici minuti e cinque secondi).
Esiste un altro approccio efficace che riduca i tempi?
Quale sarebbe la dimensione del lotto efficiente o ottimale che posso usare? Aumentando la dimensione del mio lotto il lavoro sarà più veloce? O l'apertura di più connessioni, ovvero> 5, mi aiuta a rendere il processo più veloce?
In media 14 minuti per 10 milioni di dischi non è male , ma cercare persone là fuori che lo avrebbero fatto prima per aiutare a rispondere a questa domanda.