Обзор проблемы:
Почему Dask загружает все разделы и возвращает Pandas - вместо Dask - кадры данных для таких операций, как .drop()
Как обойти эту реальность, чтобы выполнить базовое проектирование набора данных на слишком большом для моей машины кадре данных?
Подробности
Если не ошибаюсь, Dask не работает, как я сначала подумал, и, возможно, любой вызов .compute()
попытается загрузить все разделы кадра данных Dask;если операция возвращает фрейм данных, это будет иметь вид Pandas.
Я использую Dask для ускорения понимания некоторых исследовательских данных на небольшом наборе данных (~ 300 МБ).Я планировал выполнить аналогичную процедуру для гораздо большего набора данных (~ 12 ГБ), выяснив изменения синтаксиса для Dask, пришедшего из Pandas.В каждом случае я намеревался вносить базовые изменения в очистку данных, такие как удаление постоянных столбцов.
Работая с меньшим набором данных, я понял, что удаление столбцов приводит к возвращенному кадру данных Pandas.Я нахожу это удивительным (то есть, что все разделы считываются для операции удаления столбца), и это явно мешает мне выполнять такие изменения на большом кадре данных из-за ограничений памяти.
Я бы хотелзнать:
1) Как я могу работать на одной машине (8 ГБ ОЗУ) для внесения простых изменений, таких как перенос столбца в CSV ~ 12 ГБ, считывание в фрейм данных Dask.Мой план состоит в том, чтобы максимально уменьшить размер набора данных и, надеюсь, просто работать с Пандами.Я бы хотел использовать Dask вместо того, чтобы связываться с реляционными базами данных.
2) Применимо ли чтение всех разделов ко всем .compute()
вызовам.С Pandas, отбрасывание столбцов вернуло бы фрейм данных, так что, возможно, этого стоит ожидать.Однако, учитывая, что df.shape[0]
, например, возвращает целое число, сохраняет ли Dask промежуточные целые числа для каждого раздела кадра данных Dask, или снова пытается загрузить все разделы?
3) Почему отдельные кадры данных, которые составляют кадры данных Daskдолжны быть возвращены как фрейм данных Pandas вообще.Как заметил этот постер: «преобразование в панд потенциально может завершиться неудачей из-за проблем с памятью ... по причине, по которой я начал использовать Dask».
Я новичок в Даске и не эксперт по Пандам, но искренне удивлен этим поведением.
Код, который привел меня к пониманию:
keep_cols = df.drop([
'col',
'another_col',
'and_another_col'],
axis=1)
df = keep_cols.compute()
type(df)
pandas.core.frame.DataFrame