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

时间:2018-09-11 11:14:46

标签: bash shell apache-spark data-analysis data-cleaning

我在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脚本来遍历文件名并获得结果。请建议

1 个答案:

答案 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