dask无法读取熊猫可以读取的文件

时间:2019-01-15 17:39:49

标签: dask dask-distributed

我有一个csv文件,可以使用熊猫进行访问,但无法使用dask数据框。 我正在使用完全相同的参数,但仍然会因dask出错。

熊猫用例:

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无法读取文件的任何原因。

1 个答案:

答案 0 :(得分:0)

Dask通过查找行分隔符b“ \ n”来分割文件。它在文件的各个部分中寻找该单个字节,因此不需要事先读取整个内容。找到后,它不知道该字节是转义的还是在引用范围内。

因此,Dask对大文件进行分块可能会失败,并且这似乎正在发生在您身上:某个块正在换行符上完成,而这实际上并不是行尾。