我想在Sagemaker Studio中以本地模式运行pyspark作业。
根据我对官方文档的了解,我们需要access_key和secret_key来连接S3。
我计划通过下面的脚本使用botocore获得凭据。但是它的secret_key和value在pyspark和python中都不能工作。
import boto3
import pandas as pd
from io import StringIO
session = boto3.Session()
credentials = session.get_credentials()
access_key = credentials.access_key
secret_key = credentials.secret_key
// does not work
为pyspark
import sagemaker_pyspark
from pyspark.sql import SparkSession
classpath = ":".join(sagemaker_pyspark.classpath_jars())
spark = SparkSession.builder.config("spark.driver.extraClassPath", classpath)
.config("fs.s3a.access.key", credentials.access_key)
.config("fs.s3a.secret.key",credentials.secret_key).getOrCreate()
// does not work
client = boto3.client('s3', aws_access_key_id=credentials.access_key,
aws_secret_access_key=credentials.secret_key)
// doesn not work
但是,如果我不提供凭据,它可以工作
client = boto3.client('s3')
# works
我想知道boto3如何在没有凭据的情况下与S3连接,以及如何获得它们,以便我可以将这些凭据提供给pyspark。
- SageMaker Studio笔记本有一个与之关联的执行角色。因此,
s3_client = boto3.client("s3")
将按原样工作,因为它承担了笔记本的执行角色。 - 如果您希望从角色中提取访问权限和密钥,然后使用它们来访问S3,那么还需要传递令牌。像这样-
client = boto3.client(
's3',
aws_access_key_id=credentials.access_key,
aws_secret_access_key=credentials.secret_key,
aws_session_token=credentials.token
)
此外,根据您的用例,我还建议您查看Studio的通用笔记本,请参阅此处的博客-从SageMaker Studio创建和管理Amazon EMR集群以运行交互式Spark和ML工作负载-第1部分。