【问题标题】:Why running once df.read_csv method results in two .csv reads?为什么运行一次 df.read_csv 方法会导致两次 .csv 读取?
【发布时间】:2021-06-27 18:41:09
【问题描述】:

这是我的代码:

import dask.dataframe as df

data_frame = df.read_csv(normal_numerical_path, blocksize=None)
data_frame = data_frame.dropna(how='all')

bad_samples = data_frame[data_frame['Response'] == 1].shape[0].compute()
good_samples = data_frame[data_frame['Response'] == 0].shape[0].compute()

我可以在我的Dask Client 中看到.csv 文件被读取了两次:

  • 这并不理想,因为读取花费的时间最多。
  • 我能以某种方式摆脱这个吗?

当我只调用一次.read_csv 方法时,为什么Dask 会读取我的.csv 文件两次?


其他信息:

  • 我只有 16GB 或 RAM,而且我的数据集太大而无法立即放入其中 - 这是否意味着每次我在 data_frame 上调用 .compute() 方法时都需要读取 .csv 文件?
  • 因此现在导致两个长读取?
  • 当我使用两个工人时,这种行为仍然存在 - 只有一个正在运行并完成所有工作,而另一个没有做任何事情。
  • 在这种情况下,使用带有分块的 Pandas 并在数据集上调用 .shape[0] 方法而不读取两次 .csv 文件不是更快吗?

这是我的设置代码:

from dask.distributed import Client, progress

client = Client(n_workers=2, threads_per_worker=2, memory_limit='6GB')
client

【问题讨论】:

标签: python pandas csv dask


【解决方案1】:

我只有 16GB 或 RAM,而且我的数据集太大而无法立即放入其中 - 这是否意味着每次我在 data_frame 上调用 .compute() 方法时都需要读取 .csv 文件?

因此现在导致两次长读取?

是的,有一些警告。

每次对对象调用计算时,Dask 都会完全执行该对象的任务图。由于默认情况下您的数据不会缓存在内存中,因此每次都会读取数据。您可以使用client.compute 一次显式计算两个结果,这将避免多余的工作。

import dask.dataframe as dd
from dask.datasets import timeseries
from distributed import Client

client = Client()

# generate fake data for illustration
timeseries().to_csv("example");

ddf = dd.read_csv("example/*.part")

sarah = ddf.loc[ddf.name == "Sarah"]
kevin = ddf.loc[ddf.name == "Kevin"]

# compute both dataframes at once, so dask doesnt waste computation
# note that these are futures, which when finished let you access
# the "result"
sarah, kevin = client.compute([sarah, kevin])
print(sarah.result().head())
               timestamp    id   name         x         y
48   2000-01-01 00:00:48  1021  Sarah  0.227437 -0.105553
53   2000-01-01 00:00:53   933  Sarah  0.400616 -0.549600
66   2000-01-01 00:01:06  1021  Sarah -0.866886  0.762793
121  2000-01-01 00:02:01   994  Sarah  0.316168  0.305508
126  2000-01-01 00:02:06  1024  Sarah  0.978563  0.647163

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多