在pyspark(2.2.0)中将CSV文件写入AWS时如何分配访问控制列表(ACL)?

Posted

技术标签:

【中文标题】在pyspark(2.2.0)中将CSV文件写入AWS时如何分配访问控制列表(ACL)?【英文标题】:How to assign the access control list (ACL) when writing a CSV file to AWS in pyspark (2.2.0)? 【发布时间】:2018-10-05 22:20:33 【问题描述】:

我知道我可以通过

将我的 spark 数据帧作为 CSV 文件输出到 AWS S3
df.repartition(1).write.csv('s3://my-bucket-name/df_name')

我的问题是,在使用 pyspark 将其写入 S3 时,是否有一种简单的方法可以将此文件的访问控制列表 (ACL) 设置为 'bucket-owner-full-control'

【问题讨论】:

【参考方案1】:

不了解 EMR s3 连接器;在 ASF S3A 连接器中,您在打开连接时设置选项 fs.s3a.acl.default:您不能逐个文件设置它

【讨论】:

将对象放入我的 S3 存储桶后,即使所有这些配置,我仍然收到此错误。最近有没有人解决这个问题?【参考方案2】:

在构建 Spark 会话后,可以通过 Hadoop 配置设置访问控制列表 (ACL)。

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('YourAppName').getOrCreate()

如下设置ACL:

spark.sparkContext.hadoopConfiguration().set('fs.s3.canned.acl', 'BucketOwnerFullControl')

参考:s3 documentation

【讨论】:

【参考方案3】:

遇到了完全相同的问题。 Spark 作业将文件写入到服务器端加密设置为 Access Denied 的存储桶。看了一些博客,了解到这个可以通过将fs.s3a.acl.default参数设置为BucketOwnerFullControl来解决。 代码如下:

val spark =SparkSession.builder.appName().getOrCreate()

spark.sparkContext.hadoopConfiguration.set("fs.s3a.acl.default", "BucketOwnerFullControl")

【讨论】:

【参考方案4】:

我最近遇到了类似的问题,我已经尝试了上面提到的 我收到此错误“RemoteContext”对象没有属性“hadoopConfiguration”

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于在pyspark(2.2.0)中将CSV文件写入AWS时如何分配访问控制列表(ACL)?的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 中写入镶木地板的问题

尝试在Python中将集合的结果写入csv文件,但只打印一行

Pyspark - 将数据帧写入 2 个不同的 csv 文件

将 pyspark Rdd 写入 csv 文件

Pyspark 写入数据帧并将其保存到 csv 文件中会出现错误

Pyspark - java.lang.OutOfMemoryError:写入 csv 文件时的 Java 堆空间