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)
小智 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
设置spark.hadoop.fs.s3a.access.key并spark.hadoop.fs.s3a.secret.key在spark-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)
| 归档时间: |
|
| 查看次数: |
5244 次 |
| 最近记录: |