我有一个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无法读取文件的任何原因。
答案 0 :(得分:0)
Dask通过查找行分隔符b“ \ n”来分割文件。它在文件的各个部分中寻找该单个字节,因此不需要事先读取整个内容。找到后,它不知道该字节是转义的还是在引用范围内。
因此,Dask对大文件进行分块可能会失败,并且这似乎正在发生在您身上:某个块正在换行符上完成,而这实际上并不是行尾。