Какой самый эффективный способ вставить миллионы записей, скажем, 50 миллионов из фрейма данных Spark в таблицы Postgres. В прошлом я делал это от spark до MSSQL, используя опцию массового копирования и размера пакета, которая также была успешной.
Есть ли что-то подобное, что может быть здесь для Postgres?
Добавляем код, который я пробовал, и время, необходимое для запуска процесса:
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()
Таким образом, я применил вышеуказанный подход для 10 миллионов записей и имел 5 параллельных соединений, как указано в, numPartitions
а также пробовал размер пакета 200 КБ .
Общее время, затрачиваемое на процесс, составило 0: 14: 05.760926 (четырнадцать минут и пять секунд).
Есть ли другой эффективный подход, который бы сократил время?
Какой эффективный или оптимальный размер партии я могу использовать? Будет ли увеличение размера моей партии делать работу быстрее? Или открытие нескольких соединений, т. Е.> 5, поможет мне ускорить процесс?
В среднем 14 минут для 10 миллионов записей - это неплохо , но искать людей, которые сделали бы это раньше, чтобы помочь ответить на этот вопрос.