我在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脚本来遍历文件名并获得结果。请建议
答案 0 :(得分:0)
您可以使用for
循环遍历文件,并使用String Substitution来获取文件名。以下应该在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