Чтение всего каталога с помощью Spark, кроме одного файла

#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, по моему впечатлению, он работает, и вы можете попробовать.