2017-03-10 11 views
0

私は動的に設定できるようにしたい私のspark-defaults.confにおける3つのプロパティがありますHadoopが 'spark.hadoop.fs'プロパティをpysparkに設定するのを尊重しないのはなぜですか?

  • 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のプロパティを設定するに関連する他のQ &としての認識しています。

にこれらのプロパティを設定するために使用する名前であるため、spark.hadoop.*を介して動的に設定できると思ってしまうことに、後世のために記録しようとしています。このように設定しようとすると、エラーが発生します。

多くのサイトでは、「spark.hadoop.fs.s3a.access.keyプロパティを設定する」ように指示されていますが、spark-defaults.confに静的に設定し、動的にpysparkに設定しないとこのケースのみを指定しません。

答えて

4

それはあなたが経由でHadoopのプロパティを指定することはできませんことが判明:

spark.conf.set('spark.hadoop.<property>', <value>)

が、あなたの代わりに使用する必要があります。

spark.sparkContext._jsc.hadoopConfiguration().set('<property>', <value>)

私はあなただけのためにspark.conf.set()を使用することができると信じてプロパティはSpark Configurationページに記載されています。

+0

sparkContext.hadoopConfiguration()セット(キー、値) がhttp://bytepadding.com/big-data/spark/combineparquetfileinputformat/ – KrazyGautam

+0

@KrazyGautamのための統合テストを確認してください - 。これは 'pyspark'ないScalaのためのものです/ java。 – proinsias

関連する問題