用于获取hdfs中所有部件文件的行数的shell脚本

问题描述 投票:-2回答:1

我在以下结构中的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脚本迭代文件名并实现结果。请建议

bash shell apache-spark data-analysis data-cleaning
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.