<分区>
我希望能够动态设置我的 spark-defaults.conf
中的三个属性:
spark.driver.maxResultSize
spark.hadoop.fs.s3a.access.key
spark.hadoop.fs.s3a.secret.key
这是我的尝试:
from pyspark import SparkConf
from pyspark.sql import SparkSession
conf = (SparkConf()
.setMaster(spark_master)
.setAppName(app_name)
.set('spark.driver.maxResultSize', '5g')
.set('spark.hadoop.fs.s3a.access.key', '<access>')\
.set('spark.hadoop.fs.s3a.secret.key', '<secret>)
)
spark = SparkSession.builder.\
config(conf=conf).\
getOrCreate()
print(spark.conf.get('spark.driver.maxResultSize'))
print(spark.conf.get('spark.hadoop.fs.s3a.access.key'))
print(spark.conf.get('spark.hadoop.fs.s3a.secret.key'))
spark.stop()
这是我得到的输出:
5g
<access>
<secret>
但是,当我尝试使用此配置读取 S3 上的 csv 文件时,出现权限被拒绝错误。
如果我通过环境变量设置凭据,我就能够读取该文件。
为什么 Hadoop 不尊重以这种方式指定的凭据?
更新:
我知道与在 pyspark 中设置 Hadoop 属性相关的其他问答。
在这里,我试图为后代记录下您是如何被愚弄的,以为您可以通过 spark.hadoop.*
动态设置它们,因为这是您用来设置这些属性的名称spark-defaults.conf
,因为当您尝试以这种方式设置它们时不会直接收到错误。
许多站点告诉您“设置 spark.hadoop.fs.s3a.access.key
属性”,但不要指定只有在 中静态设置时才会这样>spark-defaults.conf
并且在 pyspark
中不是动态的。