2016-09-08 3 views
1

Я записываю данные (приблизительно 83M записей) из dataframe в postgresql, и это довольно медленно. Занимает 2,7 часа, чтобы завершить запись в db.Spark write to postgres slow

Рассматривая исполнителей, на одном исполнителе работает только одна активная задача. Есть ли способ распараллеливать записи в db, используя все исполнители в Spark?

... 
val prop = new Properties() 
prop.setProperty("user", DB_USER) 
prop.setProperty("password", DB_PASSWORD) 
prop.setProperty("driver", "org.postgresql.Driver") 



salesReportsDf.write 
       .mode(SaveMode.Append) 
       .jdbc(s"jdbc:postgresql://$DB_HOST:$DB_PORT/$DATABASE", REPORTS_TABLE, prop) 

Благодаря

+0

Можете ли вы добавить, что часть кода написана в PostGres? –

+0

@ThiagoBaldim просто разместил фрагмент кода для этого, спасибо –

ответ

2

Так я понял, проблема. В основном, перераспределение моего фреймворка увеличит пропускную способность записи базы данных на 100%

def srcTable(config: Config): Map[String, String] = { 

    val SERVER    = config.getString("db_host") 
    val PORT    = config.getInt("db_port") 
    val DATABASE   = config.getString("database") 
    val USER    = config.getString("db_user") 
    val PASSWORD   = config.getString("db_password") 
    val TABLE    = config.getString("table") 
    val PARTITION_COL  = config.getString("partition_column") 
    val LOWER_BOUND  = config.getString("lowerBound") 
    val UPPER_BOUND  = config.getString("upperBound") 
    val NUM_PARTITION  = config.getString("numPartitions") 

    Map(
    "url"  -> s"jdbc:postgresql://$SERVER:$PORT/$DATABASE", 
    "driver" -> "org.postgresql.Driver", 
    "dbtable" -> TABLE, 
    "user" -> USER, 
    "password"-> PASSWORD, 
    "partitionColumn" -> PARTITION_COL, 
    "lowerBound" -> LOWER_BOUND, 
    "upperBound" -> UPPER_BOUND, 
    "numPartitions" -> NUM_PARTITION 
) 

} 
+0

не могли бы вы предоставить больше detials (например, части до переделки и после) на ваш ответ, я также сталкиваюсь с аналогичной проблемой, ваша помощь в этом отношении будет принята с благодарностью - Спасибо – user2359997

+0

@ user2359997 обновил мой ответ, в зависимости от размера вашей таблицы - вы можете указать количество разделов, чтобы каждый исполнитель мог распараллелить прием данных. –