Dask не может прочитать файл, который может панда - PullRequest
0 голосов
/ 15 января 2019

У меня есть CSV-файл, к которому можно получить доступ с помощью панд, но он не работает с dask dataframe Я использую точно такие же параметры и все еще получаю ошибку с dask.

Случай использования Pandas:

import pandas as pd
mycols = ['id', 'tran_id', 'client_id', 'm_text', 'retry', 'tran_date']

df = pd.read_csv('s3://some_bucket/abigd/hed4.csv', 
        sep=',', header=None, names=mycols,  skipinitialspace=True, escapechar='\\',  
                 engine='python', dtype=str )

Выход Панды:

df.retry.value_counts()

1     2792174
2      907081
3      116369
6        6475
4        5598
7        1314
5        1053
8         288
16          3
13          3
Name: retry, dtype: int64

код напитка:

import dask.dataframe as dd
from dask.distributed import Client
client = Client('Dask-Scheduler.local-dask:8786') 

df = dd.read_csv('s3://some_bucket/abigd/hed4.csv', 
        sep=',', header=None, names=mycols,  skipinitialspace=True, escapechar='\\',  
                 engine='python', dtype=str,
        storage_options = {'anon':False, 'key': 'xxx' , 'secret':'xxx'} )


df_persisted = client.persist(df)

df_persisted.retry.value_counts().compute()

Выходные данные:

ParserError: неожиданный конец данных

Я попытался открыть меньшие (и большие) файлы в dask, и с ними не было проблем. Вполне возможно, что этот файл может иметь открытые цитаты. Я не вижу причин, по которым dask не может прочитать файл.

1 Ответ

0 голосов
/ 17 января 2019

Dask разделяет ваши файлы, ища символ разделителя строк b "\ n". Он ищет этот единственный байт в частях файла, так что все это не нужно читать заранее. Когда он находит, он не знает, экранирован ли байт или находится в кавычках.

Таким образом, обработка большого файла Dask может завершиться неудачей, и кажется, что это происходит для вас: какой-то блок заканчивается новой строкой, которая на самом деле не заканчивается строкой.

...