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

将Parquet压缩文件上传至S3子目录的问题求助

问题分析与解决思路

核心问题是本地文件与S3目标路径的映射关系未正确绑定,大概率是代码中复用了同一个目标路径变量,或循环/变量赋值时未区分两个文件的上传目标。

具体修改方案

方案1:用字典明确映射本地路径与S3目标

通过字典建立本地文件夹和对应S3子目录的绑定关系,彻底避免变量混淆:

import boto3
import os

# 初始化S3客户端
s3 = boto3.client('s3')
bucket_name = 'your-bucket-name'  # 替换为你的存储桶名称

# 定义本地路径与S3目标路径的映射表
file_mappings = [
    {
        'local_folder': 'Folder-A',
        's3_prefix': 's4/dev/A Folder/'
    },
    {
        'local_folder': 'Folder-B',
        's3_prefix': 's4/dev/x/b Folder/'
    }
]

# 遍历映射表完成上传
for mapping in file_mappings:
    local_dir = mapping['local_folder']
    s3_target = mapping['s3_prefix']
    
    # 读取文件夹内的Parquet压缩文件(假设每个文件夹仅一个目标文件)
    for filename in os.listdir(local_dir):
        if filename.endswith('.Parquet.zip'):
            local_file = os.path.join(local_dir, filename)
            s3_file_key = s3_target + filename
            
            # 执行上传
            s3.upload_file(local_file, bucket_name, s3_file_key)
            print(f"上传完成:{local_file} → s3://{bucket_name}/{s3_file_key}")

方案2:单独处理每个文件(适合文件数量少的场景)

如果仅两个文件,直接分开处理,从根源避免变量复用错误:

import boto3
import os

s3 = boto3.client('s3')
bucket_name = 'your-bucket-name'

# 处理Folder-A的文件
local_a_dir = 'Folder-A'
s3_a_target = 's4/dev/A Folder/'
for filename in os.listdir(local_a_dir):
    if filename.endswith('.Parquet.zip'):
        s3.upload_file(os.path.join(local_a_dir, filename), bucket_name, s3_a_target + filename)

# 处理Folder-B的文件
local_b_dir = 'Folder-B'
s3_b_target = 's4/dev/x/b Folder/'
for filename in os.listdir(local_b_dir):
    if filename.endswith('.Parquet.zip'):
        s3.upload_file(os.path.join(local_b_dir, filename), bucket_name, s3_b_target + filename)
排查要点
  • 检查代码中S3目标路径变量是否被重复赋值,比如循环中未更新目标路径,导致第二次上传复用了第一次的路径。
  • 确认遍历文件时,是否正确关联了对应的本地文件夹和S3路径,避免两个文件绑定到同一个S3前缀。
  • 临时添加日志输出,打印每个文件的本地路径和目标S3路径,验证映射关系是否正确。

内容的提问来源于stack exchange,提问作者Madhu Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:32:09