Pyspark AWS凭证

Roe*_*e N 3 amazon-s3 amazon-web-services apache-spark pyspark

我正在尝试运行在本地计算机上运行的PySpark脚本,该脚本可以正常运行。问题是我想从S3提取输入文件。

无论我尝试什么,尽管我似乎都找不到在哪里设置ID和密码。我找到了一些有关特定文件的答案,例如:通过Spark在本地读取S3文件(或更好的是:pyspark), 但是我想在整个代码中重用sql上下文时,为整个SparkContext设置凭据。

所以问题是:如何设置AWS Access密钥和机密来激发?

PS我尝试了$ SPARK_HOME / conf / hdfs-site.xml和环境变量选项。都没用...

谢谢

Sah*_*sai 10

对于pyspark,我们可以如下设置凭据

  sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", AWS_ACCESS_KEY)
  sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", AWS_SECRET_KEY)
Run Code Online (Sandbox Code Playgroud)

  • 仅对于将来的人来说,请记住sc是SparkContext:sc = SparkContext.getOrCreate(conf) (4认同)

小智 6

我不确定当时这是否属实,但从 PySpark 2.4.5 开始,您不需要访问私有 _jsc 对象来设置 Hadoop 属性。您可以使用 SparkConf.set() 设置 Hadoop 属性。例如:

import pyspark
conf = (
    pyspark.SparkConf()
        .setAppName('app_name')
        .setMaster(SPARK_MASTER)
        .set('spark.hadoop.fs.s3a.access.key', AWS_ACCESS_KEY)
        .set('spark.hadoop.fs.s3a.secret.key', AWS_SECRET_KEY)
)

sc = pyspark.SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

请参阅https://spark.apache.org/docs/latest/configuration.html#custom-hadoophive-configuration


ghu*_*ill 5

设置spark.hadoop.fs.s3a.access.keyspark.hadoop.fs.s3a.secret.keyspark-defaults.conf建立的火花会话之前是一个很好的办法做到这一点。

但是,Spark 2.3.2和pyspark shell也成功地从spark会话中动态设置了这些内容,并执行以下操作:

spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.access.key", AWS_ACCESS_KEY_ID)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.secret.key", AWS_SECRET_ACCESS_KEY)
Run Code Online (Sandbox Code Playgroud)

然后,可以使用s3a以下命令从S3进行读取/写入:

documents = spark.sparkContext.textFile('s3a://bucket_name/key')
Run Code Online (Sandbox Code Playgroud)