Пакетная загрузка в AWS RDS (postgres) из PySpark - PullRequest
0 голосов
/ 06 сентября 2018

Я ищу пакетный загрузчик для склеивания задания для загрузки в RDS с использованием скрипта PySpark с DataFormatWriter. У меня это работает для RedShift следующим образом:

df.write \
    .format("com.databricks.spark.redshift") \
    .option("url", jdbcconf.get("url") + '/' + DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password')) \
    .option("dbtable", TABLE_NAME) \
    .option("tempdir", args["TempDir"]) \
    .option("forward_spark_s3_credentials", "true") \
    .mode("overwrite") \
    .save()

Где df определено выше для чтения в файле. Какой наилучший подход я мог бы сделать, чтобы сделать это в RDS, а не в REDSHIFT?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Я узнал, что это можно сделать только через JDBC. Например.

df.write.format("jdbc") \
    .option("url", jdbcconf.get("url") + '/' + REDSHIFT_DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password')) \
    .option("dbtable", REDSHIFT_TABLE_NAME) \
    .option("tempdir", args["TempDir"]) \
    .option("forward_spark_s3_credentials", "true") \
    .mode("overwrite") \
    .save()
0 голосов
/ 09 сентября 2018

В RDS вы будете использовать только APPEND / OVERWRITE, в этом случае вы можете создать соединение RDS JDBC и использовать что-то вроде следующего:

postgres_url="jdbc:postgresql://localhost:portnum/sakila?user=<user>&password=<pwd>"
df.write.jdbc(postgres_url,table="actor1",mode="append") #for append
df.write.jdbc(postgres_url,table="actor1",mode="overwrite") #for overwrite

Если это связано с UPSERTS, то, вероятно, вы можете использовать библиотеку MYSQL в качестве внешней библиотеки Python и выполнить команду INSERT INTO ..... ON DUPLICATE KEY.

Пожалуйста, укажите этот URL: Как использовать JDBC-источник для записи и чтения данных в (Py) Spark?

1010 * привет *

Yuva

...