сценарий оболочки для получения количества строк всех файлов деталей в hdfs - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть набор файлов деталей в 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 голосов
/ 11 сентября 2018

Вы можете перебирать файлы, используя цикл 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
...