这个问题在这里已经有答案了:
如何从pyspark设置hadoop配置值(3个答案)
三年前关门了。
我的房子里有三处房产 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
.
1条答案
按热度按时间b1zrtrql1#
事实证明,您不能通过以下方式指定hadoop属性:
spark.conf.set('spark.hadoop.<property>', <value>)
但您必须使用:spark.sparkContext._jsc.hadoopConfiguration().set('<property>', <value>)
我相信你只能用spark.conf.set()
对于spark配置页上列出的属性。