#apache-spark #hadoop #pyspark #hdfs
Вопрос:
У меня есть следующий каталог, содержащий эти CSV-файлы:
/data/one.csv
/data/two.csv
/data/three.csv
/data/four.csv
Если я захочу прочитать все, я могу просто сделать:
/data/*.csv
но я, кажется, не могу прочитать все, кроме four.csv
.
Этот:
/data/*[^four]*.csv
казалось бы, сработало, но я думаю, что если бы список файлов был больше, чем этот способ чтения, вероятно, был бы неправильным (из-за двойных подстановочных знаков).
Есть ли хороший способ сделать это? Я также осознаю, что:
/data/{one,two,three,^four}.csv
это решило бы этот конкретный случай, но мне нужен метод except для будущих нужд.
Большое спасибо!
Ответ №1:
Я не на 100% уверен, что этот метод сработает, но вы можете попробовать. Вы можете использовать Bash/Python или любой другой скрипт для сканирования всех csv-файлов в папке, но не с именами four.csv
. Входные данные для spark будут (при условии, что у вас есть файлы: один.csv, два.csv, три.csv, четыре.csv, пять.csv, …до n файлов.csv) PathToFiles=[/data/one.csv, /data/two.csv, /data/three.csv, /data/five.csv, ..., /data/n.csv]
Затем вы можете использовать (код на python) filesRDD = spark.sparkContext.wholeTextFiles(",".join(PathToFiles))
Я написал аналогичный код на java, по моему впечатлению, он работает, и вы можете попробовать.