Предположим, я делаю это:
import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:2.7.3" pyspark-shell' from pyspark import SparkConf from pyspark import SparkContext
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf() \
.setMaster("local[2]") \
.setAppName("pyspark-unittests") \
.set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf=conf)
s3File = sc.textFile("s3a://myrepo/test.csv")
print(s3File.count())
print(s3File.id())
Я знаю, что теоретически я могу сделать это до вызова sc.textFile (...), чтобы установить мои учетные данные:
sc._jsc.hadoopConfiguration().set('fs.s3a.access.key', 'awsKey')
sc._jsc.hadoopConfiguration().set('fs.s3a.secret.key', 'awsSecret')
Тем не менее, У меня нет пары ключ / секрет, вместо этого у меня есть триплет ключ / секрет / токен (это временные учетные данные, которые периодически обновляются через AssumeRole .... см. Здесь для получения подробной информации о получении этих учетных данных: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)
Как я могу использовать триплет для аутентификации в AWS S3, а не только ключ и секрет?
Я бы предпочел использовать com.amazonaws.auth.profile.ProfileCredentialsProvider
в качестве поставщика учетных данных (и иметь ключ / secret / token в ~ / .aws / credentials). Я бы согласился предоставить их в командной строке или в жестком коде.
Если я попробую это (с моими учетными данными в ~ / .aws / credentials):
sc._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")
Я все еще получаю это:
py4j.protocol.Py4JJavaError: An error occurred while calling o37.partitions.
: com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain
Как я могу загрузить учетные данные из ~ / .aws / credentials или иным образом использовать SessionToken?