【发布时间】:2020-04-05 00:18:32
【问题描述】:
我有一个非常大的 csv 数据文件,它被分割成更小的块/部分。但是,如果您尝试加载数百万或更多行,pandas 似乎不是一个好主意,因为它实际上已加载到您的 RAM 中(我已经尝试过这个,但内核只是死了)。所以,我正在考虑使用 Dask。现在我熟悉 pandas,但不熟悉 dask。似乎也没有很多关于它的教程。
当我尝试使用 pandas 加载 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 |
+--------+--------+----------+
所以我先从 pandas 加载它,然后将其转换为 dask。
df = pd.read_csv("path/part-000", header=None)
ddf = dd.from_pandas(df,npartitions=64)
它有效,但我不喜欢这种方法,因为就像我说的那样,我将数百万行划分为更小的块/部分,因此将其加载到 pandas 然后将其转换为 dask 听起来效率不高。
所以我的问题可以概括为这个。
如何在使用
blocksize或npartitions等参数的同时将文件直接加载到Dask?如何将大量文件加载到 Dask?在 pandas 中,我通常使用
append()函数,但我不知道这是否是正确的方法。
【问题讨论】: