Я новичок в спарке и пытаюсь ускорить добавление содержимого фрейма данных (который может иметь от 200k до 2M строк) в базу данных postgres с помощью df.write:
df.write.format('jdbc').options(
url=psql_url_spark,
driver=spark_env['PSQL_DRIVER'],
dbtable="{schema}.{table}".format(schema=schema, table=table),
user=spark_env['PSQL_USER'],
password=spark_env['PSQL_PASS'],
batchsize=2000000,
queryTimeout=690
).mode(mode).save()
Iпопытался увеличить размер пакета, но это не помогло, так как выполнение этой задачи заняло ~ 4 часа. Я также включил несколько снимков ниже из aws emr, показывающих больше деталей о том, как выполнялась работа. Задача сохранения фрейма данных в таблице postgres была назначена только одному исполнителю (что мне показалось странным). Для ускорения этого процесса потребуется разделить эту задачу между исполнителями?
Кроме того, я прочитал производительность sparkнастройка документов , но увеличение batchsize
и queryTimeout
не улучшило производительность. (Я пытался вызвать df.cache()
в моем сценарии до df.write
, но время выполнения сценария было еще 4 часа)
Кроме того, мои настройки оборудования aws emr и spark-submit
:
MasterУзел (1): m4.xlarge
Базовые узлы (2): m5.xlarge
spark-submit --deploy-mode client --executor-cores 4 --num-executors 4 ...