Pyspark 2.4.0 hadoop配置写入S3

Pyspark 2.4.0 hadoopConfiguration to write to S3

Pyspark 版本 2.4.0

我正在将文件写入不属于我的 S3。然后每个人都无法阅读该文件。 我认为问题与此类似 How to assign the access control list (ACL) when writing a CSV file to AWS in pyspark (2.2.0)?

但解决方案似乎不再有效。 在 Pyspark 文档中搜索但没有得到答案。 我试过了:

from pyspark.sql import SparkSession
spark = SparkSession.\
    builder.\
    master("yarn").\
    appName(app_name).\
    enableHiveSupport().\
    getOrCreate()
spark.sparkContext.hadoopConfiguration.set("fs.s3a.acl.default", "BucketOwnerFullControl")

这给了我: 错误 - {"exception":“'SparkContext' 对象没有属性 'hadoopConfiguration'”

手头有两个问题。

  1. 为了设置新配置,您需要使用新 config 再次 getOrCreate() 您的 SparkSession。您将无法 set。例如:
import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.master("local").getOrCreate()
sc = spark.sparkContext
conf = pyspark.SparkConf().setAll([('spark.executor.memory', '1g')])

# stop the sparkContext and set new conf
sc.stop()
spark = SparkSession.builder.config(conf=conf).getOrCreate()
  1. 为了设置 Hadoop Config,您需要在它们前面添加 spark.hadoop。这意味着您的配置将变为
conf = pyspark.SparkConf().setAll([("spark.hadoop.fs.s3a.acl.default", "BucketOwnerFullControl")])

希望这对您有所帮助。