能否将S3桶中的txt/jsonl文件作为gensim Doc2Vec的corpus_file输入?
如何将S3存储桶中的文件作为gensim Doc2Vec的corpus_file输入?
直接传入S3路径或迭代器给corpus_file参数是行不通的,原因有两点:
corpus_file参数要求必须是本地文件系统的有效路径(或兼容Python标准open()函数的路径类对象),不直接支持S3这类远程存储路径;- 迭代器是
documents参数的合法输入,并非corpus_file的可接受类型,所以传迭代器也会触发相同的类型错误。
可行解决方案
核心思路是将S3上的文件同步到本地文件系统,再将本地路径传入corpus_file。以下是两种实现方式:
方式一:使用boto3下载文件到本地临时路径
import boto3 from gensim.models.doc2vec import Doc2Vec # 配置S3信息 bucket_name = "bucket_name" s3_file_key = "subdir/sample.jsonl" local_temp_path = "/tmp/sample.jsonl" # 云环境(如Lambda、EC2)常用临时目录 # 初始化S3客户端并下载文件 s3 = boto3.client("s3") s3.download_file(bucket_name, s3_file_key, local_temp_path) # 传入本地路径至corpus_file model = Doc2Vec(corpus_file=local_temp_path)
注意:使用后可删除临时文件以释放空间,不同云环境的临时目录路径可能有差异,按需调整。
方式二:使用s3fs库简化S3文件操作
先安装依赖:
pip install s3fs
再实现文件同步与模型初始化:
import s3fs from gensim.models.doc2vec import Doc2Vec import tempfile # 初始化S3文件系统 fs = s3fs.S3FileSystem() # 创建临时文件并写入S3文件内容 with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: s3_file_path = "s3://bucket_name/subdir/sample.jsonl" with fs.open(s3_file_path, 'r') as s3_file: temp_file.write(s3_file.read()) temp_file_path = temp_file.name # 传入临时文件路径至corpus_file model = Doc2Vec(corpus_file=temp_file_path)
内容的提问来源于stack exchange,提问作者Mutasim Mim
相关产品推荐
相关产品推荐

