#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())