有三個屬性在我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