Невозможно прочитать CSV-файл из DASK, за исключением, если сначала загружен из pandas - PullRequest
1 голос
/ 04 апреля 2020

У меня есть очень большой файл данных CSV, который разделен на более мелкие куски / части. Но pandas не кажется хорошей идеей, если вы пытаетесь загрузить миллионы или больше строк, потому что он по существу загружен в вашу RAM (я пробовал это, и ядро ​​просто умерло вместо этого). Итак, я думаю об использовании Dask. Теперь я знаком с pandas, но не с Dask. Похоже, что об этом тоже не так много учебников.

Когда я пытаюсь загрузить одну часть файла csv (около 60.000 ~ строк) с помощью pandas, он все равно работает нормально. Проблема в том, что я пытался загрузить все детали (их сотни). Я хочу использовать Dask для этого, но даже загрузка одной части все равно не удалась.

import dask.dataframe as dd
import pandas as pd

ddf = dd.read_csv("path/part-000", header=None, blocksize=None)

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

len(ddf)

ValueError: Mismatched dtypes found in `pd.read_csv`/`pd.read_table`.

+--------+--------+----------+
| Column | Found  | Expected |
+--------+--------+----------+
| 1      | object | float64  |
| 2      | object | float64  |
| 4      | object | int64    |
+--------+--------+----------+

Поэтому я сначала загрузил его из pandas, а затем преобразовал в dask.

df = pd.read_csv("path/part-000", header=None)
ddf = dd.from_pandas(df,npartitions=64)

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

Таким образом, мои вопросы могут быть суммированы в этом.

  1. Как мне загрузить файл непосредственно в Dask, используя также такие параметры, как blocksize или npartitions?

  2. Как загрузить много файлов в Dask? В pandas я обычно использую функцию append(), но понятия не имею, правильный ли это подход.

1 Ответ

0 голосов
/ 04 апреля 2020

Оставшаяся часть сообщения об ошибке, которое дает вам Dask, предоставляет ключевое слово dtype=, чтобы предоставить его вызову read_csv, чтобы убедиться, что все работает (кажется, что вы отключили это в этом вопросе). Вероятно, это выглядит следующим образом:

dtypes={1: object, 2: object, 4:object}

Если вы включите предоставленную строку в вызов read_csv, то все должно работать.

...