Що було б найефективнішим способом вставити мільйони записів, скажімо, 50 мільйонів із фрейму даних Spark до таблиць Postgres. У минулому я це робив від іскри до 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
а також спробував розмір партії 200k .
Загальний час, який знадобився процесу, склав 0: 14: 05,760926 (чотирнадцять хвилин і п’ять секунд).
Чи є якийсь інший ефективний підхід, який би скоротив час?
Яким би був ефективний чи оптимальний розмір партії, яку я можу використовувати? Чи збільшить розмір моєї партії роботу швидше? Або відкриття декількох з'єднань, тобто> 5 допоможе мені зробити процес швидшим?
В середньому 14 хвилин на 10 мільйонів записів непогано , але шукати людей, які б це зробили раніше, щоб допомогти відповісти на це питання.