【问题标题】:PySpark Writing DataFrame Partitions to S3PySpark 将 DataFrame 分区写入 S3
【发布时间】:2019-01-16 12:04:51
【问题描述】:

我一直在尝试分区并将 spark 数据帧写入 S3,但出现错误。

df.write.partitionBy("year","month").mode("append")\
    .parquet('s3a://bucket_name/test_folder/')

错误信息是:

Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: 
Status Code: 403, AWS Service: Amazon S3, AWS Request ID: xxxxxx, 
AWS Error Code: SignatureDoesNotMatch, 
AWS Error Message: The request signature we calculated does not match the signature you provided. Check your key and signing method.

但是,当我只写而不分区时它确实有效

df.write.mode("append").parquet('s3a://bucket_name/test_folder/')

什么可能导致这个问题?

【问题讨论】:

    标签: amazon-s3 pyspark apache-spark-sql


    【解决方案1】:

    我通过在我的 spark-submit 中从 aws-java-sdk:1.7.4 升级到 aws-java-sdk:1.11.199hadoop-aws:2.7.7hadoop-aws:3.0.0 解决了这个问题。

    我在我的 python 文件中使用:

    os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.11.199,org.apache.hadoop:hadoop-aws:3.0.0 pyspark-shell
    

    但您也可以将它们作为参数直接提供给 spark-submit。

    我必须重建 Spark,提供我自己的 Hadoop 3.0.0 版本以避免依赖冲突。

    您可以在这里阅读我对根本原因的一些推测:https://stackoverflow.com/a/51917228/10239681

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 2018-05-24
      • 2020-05-20
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多