Как загрузить каталог csv в hdfs как паркет - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть локальная папка на linux с тысячами CSV-файлов.

Каждый CSV-файл имеет размер ~ 1 МБ.

Файлы имеют одинаковые столбцы / формат, и они различаются посамо имя файла (например, xxx_1.csv, xxx_2.csv, xxx_3, csv и т. д.)

Теперь я хочу загрузить каталог в HDFS и сохранить его в формате паркета.

Как правильно сделать это в python (spark 2.3)?

  1. Каков наилучший способ загрузки всего каталога?
  2. Какое разбиение следует использовать?(имя файла должно быть разделом? или лучше добавить имя файла в качестве нового столбца?)

Спасибо

1 Ответ

0 голосов
/ 20 ноября 2018

Spark уже читает целые каталоги и может записать весь этот фрейм данных в Parquet

df = spark.read.csv("file:///local_csv_dir")
df.write.parquet("hdfs:///other/dir")

read.csv даже имеет доступ к именам файлов, поэтому я не думаю, что вы можете разделить его таким образом.

Вы можете добавлять имена файлов с помощью функций withColumn и input_file_name, однако в идеале вы должны разбить поле в данных с низким количеством элементов (несколько уникальных значений)

Возможно, «лучшим» способом было бы поместить все файлы CSV в большой архив BZ2 и просто поместить их в HDFS.Затем вы можете читать этот один файл параллельно и записывать в разные форматы, или обрабатывать его напрямую, все в Hadoop

...