【问题标题】:dask can not read the file that pandas candask 无法读取 pandas 可以读取的文件
【发布时间】:2019-01-15 17:39:48
【问题描述】:

我有一个 csv 文件,可以使用 pandas 访问,但使用 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 中打开更小(和更大)的文件,但它们没有问题。该文件可能有未闭合的引号。我看不出 dask 无法读取文件的任何原因。

【问题讨论】:

    标签: dask dask-distributed


    【解决方案1】:

    Dask 通过查找行分隔符 b"\n" 来拆分文件。它在文件的某些部分中查找这个单字节,因此不需要事先读取整个内容。当它发现它不知道字节是否被转义或在引用的范围内。

    因此,Dask 对大文件的分块可能会失败,您似乎正在发生这种情况:某些块在换行符上结束,而这并不是真正的换行符。

    【讨论】:

    • 你能检查一下这个文件到底有什么问题吗?如果你给我发一封来自世界上最受欢迎的电子邮件提供商的电子邮件,我可以分享文件。
    • 您需要检查不是真正行尾的行尾字符
    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2019-03-18
    • 2018-01-25
    • 2023-02-10
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多