Обработка CSV-файлов один за другим в pyspark - PullRequest
1 голос
/ 17 апреля 2020

CSV-файлы размещаются в папке HDFS. Все файлы имеют одинаковую схему. Я должен читать файлы CSV и создавать разделы на основе имени файла. Есть ли способ прочитать все файлы CSV в Dataframe и обработать их один за другим?

File name : file1_20200417123.csv
Parition : year_month=202004 day=17

File name : file2_20190212208.csv
Partition : year_month=201902 day=12

Нужно прочитать эти 2 файла и создать разделы и сохранить данные в соответствующих разделах.

1 Ответ

0 голосов
/ 17 апреля 2020

Считайте файл CSV, используя spark.read.csv

  • Используя функцию input_file_name(), мы можем получить имя файла для каждой записи.
  • Разделите имя файла с помощью _ и извлеките последний элемент.
  • Используя substring (or) date_format (or) from_unixtime(unix_timestamp) функции, мы можем извлечь year_month, day и добавить в качестве столбцов в фрейм данных.

Example:

#sample data in csv directory

file1_20200417123.csv
file2_20190212208.csv

$cat * csv
id,name
1,"a"
id,name
2,"b"

spark.read.option("header","true").csv("csv").\
withColumn("filename",reverse(split(input_file_name(),'_'))[0]).\
withColumn("year_month",substring(col("filename"),0,6)).\
withColumn("day",substring(col("filename"),7,2)).\
drop("filename").\
show(10,False)
#+---+----+----------+---+
#|id |name|year_month|day|
#+---+----+----------+---+
#|2  |b   |201902    |12 |
#|1  |a   |202004    |17 |
#+---+----+----------+---+
...