无法从dask读取csv文件,除非先从panda加载



我有一个非常大的csv数据文件,它被分割成更小的块/部分。但是,如果你试图加载数百万或更多的行,panda似乎不是一个好主意,因为它基本上是加载到你的RAM中的(我试过这个,但内核只是死了(。所以,我正在考虑使用Dask。现在我熟悉熊猫了,但不熟悉达斯克。似乎也没有太多关于它的教程。

当我试图用panda加载csv文件的一部分(大约60.000~行(时,它仍然可以正常工作。问题是当我试图加载所有零件(数百个(时。我想使用Dask,但即使加载一个部件仍然失败。

import dask.dataframe as dd
import pandas as pd
ddf = dd.read_csv("path/part-000", header=None, blocksize=None)

当我尝试上面的代码时,一开始它似乎工作得很好,但之后我所做的所有代码都会导致错误。当我直接从dask读取文件时,我似乎也无法放入npartitions。

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    |
+--------+--------+----------+

所以我先从熊猫那里加载,然后把它转换成dask。

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

它是有效的,但我不喜欢这种方法,因为正如我所说,我有数百万行被分割成更小的块/部分,所以将其加载到panda,然后将其转换为dask听起来并不太有效。

所以我的问题可以总结成这样。

  1. 如何在使用blocksizenpartitions等参数的同时将文件直接加载到Dask?

  2. 如何将大量文件加载到Dask?在panda中,我通常使用append()函数,但我不知道这是否是正确的方法。

Dask给您的错误消息的其余部分提供了一个dtype=关键字,以提供给您的read_csv调用,以确保一切正常(在这个问题中,您似乎切断了这一点(。它可能看起来如下:

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

如果您在read_csv调用中包含所提供的行,那么一切都应该正常。

最新更新