EMR中s3-dist-cp使用groupBy正则合并CSV文件失败求助
解决S3DistCp合并小CSV文件时的无匹配文件警告问题
首先,你遇到的警告核心问题是当前的groupBy正则写法不符合S3DistCp的预期逻辑,导致工具无法正确匹配并选中要合并的文件。以下是具体的排查和解决步骤:
1. 简化命令:去掉多余的groupBy参数
如果你的需求只是把所有小CSV合并成约100MB的文件,完全不需要groupBy——targetSize参数本身就能自动将所有输入文件合并为多个指定大小的输出文件。
试试运行这个简化后的命令:
s3-dist-cp --src=s3://surge-experiment-hourly-data/snapshot_day_zl_2023-09-17/ --dest=s3://surge-experiment-hourly-data/combined_test/ --targetSize=100
2. 若必须使用groupBy,修正正则写法
你之前的'.*(csv)'正则存在两个问题:
- 没有精准匹配CSV文件的后缀逻辑,它会误匹配任何包含
csv字符串的文件(比如文件名中间带csv的非CSV文件) - S3DistCp基于Java正则引擎,匹配文件的相对路径(相对于你指定的
src目录),需要用转义的点来匹配后缀分隔符
把正则改成精准匹配.csv结尾的文件,同时保留分组逻辑:
s3-dist-cp --src=s3://surge-experiment-hourly-data/snapshot_day_zl_2023-09-17/ --dest=s3://surge-experiment-hourly-data/combined_test/ --groupBy='^.*\\.csv$' --targetSize=100
这个正则会匹配所有以.csv结尾的相对路径文件,将所有CSV文件归为一组,之后按100MB大小合并。
3. 额外排查点
- 确认EMR集群的IAM角色拥有S3源路径的读权限和目标路径的写权限(你日志显示已获取文件信息,这一步大概率没问题)
- 检查源路径是否正确:你的
src路径是s3://surge-experiment-hourly-data/snapshot_day_zl_2023-09-17/,示例文件的Key确实在这个目录下,路径无误
内容的提问来源于stack exchange,提问作者MRMDP
相关产品推荐
相关产品推荐

