Чтение текстовых файлов в Dask DataFrame

Я хочу обучить модель на ~ 100 000 текстовых файлов. Pandas столкнулся с некоторыми проблемами с памятью, поэтому решил перейти на Dask.

Я пытаюсь прочитать файлы в Dask DataFrame, в котором пути к файлам уже сохранены. В пандах я мог бы просто сделать следующее:

ddf['rawtext'] = [open(file, 'rt').read() for file in ddf['filepath']]

Но это дает ошибку NotImplementedError.

Есть ли способ эффективно читать текстовые файлы в Dask?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
855
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В pandas вам просто нужно указать путь к одному файлу, и он будет обрабатывать операции I/O за вас, нет необходимости открывать каждый файл и передавать его в список.

Dask, как и многие другие крупные фреймворки, может принимать каталог объектов и читать их за один раз.

Из документов.

!ls data/*.csv | head

data/2000-01-01.csv
data/2000-01-02.csv
data/2000-01-03.csv
data/2000-01-04.csv
data/2000-01-05.csv
data/2000-01-06.csv
data/2000-01-07.csv
data/2000-01-08.csv
data/2000-01-09.csv
data/2000-01-10.csv

dd.read_csv('data/2000-*-*.csv')

В вашем случае я бы предположил, что это

dd.read_csv('data/*.txt')

Спасибо, но единственная проблема, которая у меня есть, заключается в том, что использование read_csv правильно читает файл. Каждый текстовый файл представляет собой несколько строк, которые я хочу сохранить в одной ячейке. установка sep=None приводит к ParserError

Migos 18.12.2020 22:35
Ответ принят как подходящий

То, что вы можете сделать в Pandas, вы можете сделать в Dask, используя map или map_partitions

def read_them(df):
    df['rawtext'] = [open(file, 'rt').read() for file in ddf['filepath']]
    return df

ddf2 = ddf.map_partitions(read_them)

ИЛИ

ddf2 = ddf.assign(
    raw_text=ddf.filepath.map(lambda x: open(x, 'rt').read())
)

В первом варианте может быть больше символов, но он проще и больше соответствует исходному коду. Какую бы обработку (построчно) вы ни хотели сделать со своим текстом дальше, вы все равно можете делать это в той же функции.

Другие вопросы по теме