我在以下结构中的hdfs中有一组部件文件:
/folder1/folder2/daily_AB20180910.csv
/folder1/folder2/daily_BC20180910.csv
/folder1/folder2/daily_CD20180910.csv
daily_AB20180910.csv,daily_BC20180910.csv等是文件夹,其中有部分文件格式为:part-00000,part-00001等。
现在,我想要一个文件,它以下列格式给出了所有零件文件的行数:
AB20180910 - 1000
BC20180910 - 2000
CD20180910 - 4000
为此,我手动使用了这样的命令:
echo - 'AB20180910 ' -~hadoop fs -cat /folder1/folder2/daily_AB20180910.csv/* | wc -l >> count.txt &
这有效,但我想知道,如果我可以使用循环或可能是一个scala脚本迭代文件名并实现结果。请建议
您可以使用for
循环遍历文件并使用字符串替换来获取文件的名称。以下应该在bash中起作用:
for file in $(hdfs dfs -ls /folder1/folder2/*.csv | awk '{print $8}')
# Store count in a variable
count=$(hdfs dfs -cat ${file} | wc -l)
# Regex to extract ABC from daily_ABC.csv
filename=$(echo "${f##*/}" | grep -oP 'daily_\K([a-zA-Z0-9]+)(?=.csv)')
echo "${filename} - $count"
done