有三个属性在我spark-defaults.conf
,我希望能够动态地设置:为什么Hadoop不尊重在pyspark中设置的'spark.hadoop.fs'属性?
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不尊重指定的证书?
更新:
我知道其他Q &的作为涉及在pyspark设置Hadoop的性能。
在这里,我想记录的后代如何被愚弄,认为你可以通过spark.hadoop.*
动态设置它们,因为这是你用来设置这些属性的名称,在spark-defaults.conf
,因为你没有得到直接尝试以这种方式设置它们时出错。
许多网站告诉你“设置spark.hadoop.fs.s3a.access.key
财产”,但不指定,这只是个案,如果你在pyspark
静态地spark-defaults.conf
设置它,而不是动态的。
sparkContext.hadoopConfiguration()集(键,值) 检查http://bytepadding.com/big-data/spark/combineparquetfileinputformat/ – KrazyGautam
@KrazyGautam集成测试 - 这是'pyspark'不斯卡拉/ JAVA。 – proinsias