我正在寻找用于胶水作业的批处理加载器,以使用带有DataFormatWriter的PySpark脚本加载到RDS中。 我为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中,我可以采取的最佳方法是什么?
答案 0 :(得分:0)
在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。
请参考以下网址:How to use JDBC source to write and read data in (Py)Spark?
致谢
Yuva
答案 1 :(得分:0)
我了解到,这只能通过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()