Слияние файлов CSV в ADLS2, подготовленных с помощью DataBricks - PullRequest
0 голосов
/ 17 января 2020

При выполнении кода DataBricks, подготовке CSV-файлов и загрузке их в ADLS2 CSV-файлы разделяются на множество CSV-файлов и загружаются в ADLS2.

Существует ли способ объединения этих CSV-файлов в ADLS2? через pyspark.

Спасибо

1 Ответ

1 голос
/ 17 января 2020

Есть ли способ объединить эти CSV-файлы в ADLS2 через pyspark.

Как я знаю, spark dataframe делает файлы отдельно. Теоретически, вы можете использовать spark Метод .csv , который может принимать список строк в качестве параметров.

enter image description here

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

Объединяет все файлы из исходной папки в один файл. Если указано имя файла, имя объединенного файла является указанным именем. В противном случае это автоматически сгенерированное имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...