【发布时间】: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
【问题讨论】:
-
每次调用
computeDask 都会完全执行任务图,因为默认情况下您的数据不会缓存在内存中。这些文档有望帮助澄清正在发生的事情:distributed.dask.org/en/latest/manage-computation.html