Pyspark: Прочитайте несколько csv-файлов и аннотируйте их исходным кодом

#python #apache-spark #pyspark

Вопрос:

У нас возникли проблемы с массовым приемом файлов в spark.

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

 spark.read.csv("path/to/file*.csv")
 

или путем передачи списка интересующих путей

 spark.read.csv(["path/to/file1.csv", "path/to/file2.csv"])
 

В нашей ситуации у нас есть большое количество файлов (>100 тыс.) с кодированными идентификаторами имени файла и без идентификатора, закодированного в самой таблице. Использование любого из описанных выше методов действует как простое объединение файлов и, похоже, не позволяет хранить имя файла в любом месте набора данных.

Как бы я мог объединить все эти CSV-файлы, сохранив кодированный идентификатор имени файла.

Ответ №1:

существует простая функция, называемая input_file_name .

 from pyspark.sql import functions as F

df = spark.read.csv("path/to/file*.csv").withColumn("filename", F.input_file_name())