You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EMR Studio工作区实现Python脚本导入S3或EMR目录数据?

直接从S3导入Python模块到EMR Studio的方案

核心思路

Python默认无法直接识别S3路径作为模块导入源,需要借助s3fs库实现S3文件系统的挂载,再将S3上的模块目录添加到Python路径;或是直接读取S3上的模块文件内容并动态加载。


方法1:通过s3fs添加S3路径到Python路径

  1. 先安装依赖包(EMR Studio环境默认未预装)
pip install s3fs
  1. 在Python脚本中配置S3密钥并导入模块
import sys
import s3fs

# 方式1:硬编码密钥(不推荐,建议用环境变量)
fs = s3fs.S3FileSystem(
    key='你的Access Key',
    secret='你的Secret Access Key'
)

# 方式2:通过环境变量读取密钥(推荐)
# 先在EMR Studio终端执行:export AWS_ACCESS_KEY_ID=你的Access Key && export AWS_SECRET_ACCESS_KEY=你的Secret Access Key
# fs = s3fs.S3FileSystem()

# 将S3上存放mysource目录的父路径添加到Python路径
# 示例:若mysource在s3://your-bucket/path/to/modules/下,就添加这个父路径
sys.path.append('s3://your-bucket/path/to/modules/')

# 现在可以直接导入模块
from mysource.settings import *

方法2:动态加载S3上的模块文件

如果不想修改Python路径,可以直接读取S3上的模块文件内容并动态加载:

import importlib.util
import s3fs

# 初始化S3文件系统(同样推荐用环境变量配置密钥)
fs = s3fs.S3FileSystem(
    key='你的Access Key',
    secret='你的Secret Access Key'
)

# 读取S3上的settings.py文件
with fs.open('s3://your-bucket/path/to/mysource/settings.py', 'r') as f:
    module_content = f.read()

# 创建模块对象并执行内容
spec = importlib.util.spec_from_loader('mysource.settings', loader=None)
settings_module = importlib.util.module_from_spec(spec)
exec(module_content, settings_module.__dict__)

# 调用模块中的变量/方法,比如
# print(settings_module.YOUR_VARIABLE)

为什么EMR控制台能成功导入?

之前在EMR控制台将S3文件复制到EMR本地/home/mysource/settings,该目录默认会被Python识别为模块路径;但EMR Studio工作区的环境不会自动关联S3路径,且原生Python不支持直接从S3导入模块,因此需要借助s3fs实现桥接。

内容的提问来源于stack exchange,提问作者Gaurav Singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:33:17