如何在 pyspark 中从一个 S3 存储桶读取数据并将其写入另一个 S3 存储桶?

abs*_*ted 5 amazon-s3 amazon-web-services pyspark

我尝试执行以下操作 - 为每个存储桶设置特定配置 - 从一个 S3 存储桶读取数据并写入另一个存储桶。这两个存储桶具有不同的凭据并且属于不同的帐户。但是,读取仅适用于第一个存储桶。也就是说,如果我们首先访问第一个存储桶,则第二个存储桶将永远不可用(反之亦然)。

import os

## B1 CONF
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b1.access.key", B1_ACCESS_KEY)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b1.secret.key", B1_SECRET_KEY)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b1.endpoint", B1_ENDPOINT)

## B2 CONF

spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b2.access.key", B2_ACCESS_KEY)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b2.secret.key", B2_SECRET_KEY)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.bucket.b2.endpoint", B2_ENDPOINT)

df1 = spark.read.parquet("s3a://" + B1_BUCKET_NAME + "/somepath")
df.show()

df2 = spark.read.parquet("s3a://" + B2_BUCKET_NAME + "/somepath")
od.show()
Run Code Online (Sandbox Code Playgroud)

错误是: Py4JJavaError: An error occurred while calling o915.parquet. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage X failed N times, most recent failure: Lost task 0.15 in stage X (TID M, IP, executor T): java.io.IOException: Bucket b2 does not exist

有没有其他方法可以同时访问两个不同的存储桶?