Есть ли способ объединить эти CSV-файлы в ADLS2 через pyspark.
Как я знаю, spark dataframe делает файлы отдельно. Теоретически, вы можете использовать spark Метод .csv , который может принимать список строк в качестве параметров.
>>> df = spark.read.csv('path')
Затем используйте df.to Pandas () .to_csv () метод для записи объектов в pandas
dataframe. Вы можете сослаться на некоторые подсказки из этого случая: Azure Data-bricks: как читать файлы деталей и сохранять их как один файл капать? .
Тем не менее, я боюсь, что этот процесс не может удерживать такое высокое потребление памяти. Итак, я бы посоветовал вам просто использовать пакет os
для непосредственного выполнения задачи слияния. Я протестировал приведенный ниже фрагмент кода для справки.
1st:
import os
path = '/dbfs/mnt/test/'
file_suffix = '.csv'
filtered_files = [file for file in files if file.endswith(file_suffix)]
print(filtered_files)
with open(path + 'final.csv', 'w') as final_file:
for file in filtered_files:
with open(file) as f:
lines = f.readlines()
final_file.writelines(lines[1:])
2-й:
import os
path = '/dbfs/mnt/test/'
file_suffix = '.csv'
filtered_files = [os.path.join(root, name) for root, dirs, files in os.walk(top=path , topdown=False) for name in files if name.endswith(file_suffix)]
print(filtered_files)
with open(path + 'final2.csv', 'w') as final_file:
for file in filtered_files:
with open(file) as f:
lines = f.readlines()
final_file.writelines(lines[1:])
Второй - совместимая иерархия.
In Кроме того, я предоставляю способ, который использует операцию копирования ADF для передачи нескольких файлов CSV в один файл в ADLS gen2.
Пожалуйста, обратитесь к этому do c и настройте путь к папке в исходном наборе данных ADLS gen2. Затем установите MergeFiles со свойством copyBehavior (кроме того, вы можете использовать wildFileName, например *.csv
, чтобы исключить файлы, к которым вы не хотите прикасаться, в указанной папке c)
Объединяет все файлы из исходной папки в один файл. Если указано имя файла, имя объединенного файла является указанным именем. В противном случае это автоматически сгенерированное имя файла.