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

如何从HDFS复制指定CSV文件并保留原目录结构?

解决HDFS仅复制指定模式文件并保留目录结构的方法

方法一:使用HDFS自带筛选参数(推荐)

HDFS的dfs -get(与copyToLocal功能一致)支持--include和--exclude参数过滤文件,且默认保留原目录结构。

执行以下命令:

hdfs dfs -get --include="*.csv" --exclude="*" /some/path ./local_target_dir
  • --include="*.csv":仅匹配CSV格式文件
  • --exclude="*":排除所有其他类型文件
  • ./local_target_dir:本地目标目录,无需提前创建,命令会自动生成与HDFS对应的子目录结构(如local_target_dir/report01/、local_target_dir/report02/等)

该方式既不会复制无关大文件,也能完整保留原有目录层级,且每个report下的CSV文件会存放在各自子目录中,避免重名冲突。

方法二:Shell脚本遍历复制(适配复杂筛选场景)

若旧版本HDFS不支持上述参数,可通过Shell脚本手动处理:

#!/bin/bash
HDFS_SRC="/some/path"
LOCAL_DEST="./local_target_dir"

# 遍历HDFS中所有CSV文件
hdfs dfs -find $HDFS_SRC -name "*.csv" | while read hdfs_file; do
    # 提取文件相对路径(去除HDFS根路径前缀)
    relative_path=${hdfs_file#$HDFS_SRC/}
    # 构建本地目标文件路径
    local_file="$LOCAL_DEST/$relative_path"
    # 创建本地目录(不存在则自动生成)
    mkdir -p $(dirname "$local_file")
    # 复制单个CSV文件到对应目录
    hdfs dfs -copyToLocal "$hdfs_file" "$local_file"
done

将脚本保存为copy_hdfs_csv.sh,赋予执行权限chmod +x copy_hdfs_csv.sh后运行即可。脚本会逐个处理CSV文件,先创建匹配的本地目录再复制,完全保留原结构且无重名问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:03:32