Способы создания списка из столбца данных Dask

Я хочу создать список/набор из столбца Dask Dataframe. По сути, я хочу использовать этот список для фильтрации строк в другом фрейме данных, сопоставляя значения со столбцом в этом фрейме данных. Я пытался использовать list(df[column]) и set(df[column]), но это занимает много времени и в конечном итоге выдает ошибку относительно создания кластера или иногда перезапускает ядро ​​при достижении предела памяти.

Могу ли я использовать dask.bag или многопроцессорность для создания списка?


person nehat280    schedule 31.12.2020    source источник


Ответы (1)


когда вы пытаетесь преобразовать столбец в список или установить с помощью обычного list/set, Python загрузит его в память, поэтому у вас возникает проблема с ограничением памяти.

Я считаю, что с помощью dask.bag вы можете решить эту проблему, поскольку dask.bag будет лениво загружать ваши данные, хотя я не уверен, что df[column] не нужно будет сначала читать. Кроме того, имейте в виду, что превращение этого столбца в сумку займет некоторое время в зависимости от размера данных.

Использование dask.bag позволяет вам запускать карту, фильтровать и агрегировать, поэтому кажется, что это может быть хорошим решением вашей проблемы.

Вы можете попробовать запустить это, чтобы увидеть, фильтрует ли он список/сумку, как вы ожидаете.

import dask.bag as db

bag = db.from_sequence(df[column], npartitions=5) 

bag.filter(lamdba list_element: list_element == "filtered row")

Поскольку это всего лишь пример, вам нужно будет изменить npartitions и лямбда-выражение в соответствии с вашими потребностями.

Позвольте мне знать, если это помогает

person FabioRosado    schedule 01.01.2021
comment
Привет, @FabioRosado, я пытался создать сумку из df[column], но на создание сумки ушло почти 2 минуты. Мой Dataframe имеет около 10 миллионов строк. может быть поэтому он выглядит довольно долго. - person nehat280; 02.01.2021
comment
Честно говоря, я боялся этого, моя первоначальная интуиция подсказывала мне, что, передавая кадр данных в сумку, dask должен будет сначала прочитать каждый элемент, даже если делать это ленивым способом, чтение займет n времени. Я постараюсь посмотреть, смогу ли я придумать лучший способ сделать это, и отредактирую свой ответ, если смогу что-нибудь придумать. - person FabioRosado; 03.01.2021