需要在本地模式下运行Pyspark作业,并在Sagemaker Studio内连接S3



我想在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。

  1. SageMaker Studio笔记本有一个与之关联的执行角色。因此,s3_client = boto3.client("s3")将按原样工作,因为它承担了笔记本的执行角色。
  2. 如果您希望从角色中提取访问权限和密钥,然后使用它们来访问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部分。

相关内容

最新更新