【问题标题】:Batch loading into AWS RDS (postgres) from PySpark从 PySpark 批量加载到 AWS RDS (postgres)
【发布时间】:2019-02-12 00:46:59
【问题描述】:

我正在寻找一个批处理加载器,用于使用带有 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 中,我可以采取的最佳方法是什么?

【问题讨论】:

    标签: amazon-web-services amazon-rds aws-glue


    【解决方案1】:

    在 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?

    问候

    尤瓦

    【讨论】:

      【解决方案2】:

      我了解到这只能通过 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()
      

      【讨论】:

        猜你喜欢
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2022-06-13
        • 2021-12-27
        相关资源
        最近更新 更多