Как ускорить спарк df.write jdbc к базе данных postgres? - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в спарке и пытаюсь ускорить добавление содержимого фрейма данных (который может иметь от 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 ...

enter image description here

enter image description here

...