【发布时间】:2017-10-17 19:17:45
【问题描述】:
tl;dr:
是否可以.set_index()对多个 Dask 数据帧同时并行执行方法?或者,是否可以在多个 Dask Dataframes 上懒惰地.set_index(),这会导致同时并行设置索引?
这是场景:
- 我有几个时间序列
- 每个时间序列存储几个
.csv文件。每个文件都包含与特定日期相关的数据。此外,文件分散在不同的文件夹中(每个文件夹包含一个月的数据) - 每个时间序列都有不同的采样率
- 所有时间序列都有相同的列。它们都有一个包含
DateTime等的列。 - 数据太大,无法在内存中处理。这就是我使用 Dask 的原因。
- 我想将所有时间序列合并到一个 DataFrame 中,由
DateTime对齐。为此,我需要首先将resample()每个时间序列设置为一个共同的采样率。然后.join()所有时间序列。 -
.resample()只能应用于索引。因此,在重新采样之前,我需要在每个时间序列的 DateTime 列上.set_index()。 - 当我在一个时间序列上询问
.set_index()方法时,计算立即开始。这导致我的代码被阻止并等待。此时,如果我检查我的机器资源使用情况,我可以看到正在使用许多内核,但使用率没有超过 ~15%。这让我认为,理想情况下,我可以将.set_index()方法同时应用于多个时间序列。
在达到上述情况后,我尝试了一些不优雅的解决方案来并行应用 .set_index() 方法在几个时间序列上(例如创建一个 multiprocessing.Pool ),但没有成功。在提供更多详细信息之前,是否有解决上述情况的干净方法?在实施 Dask 时是否考虑过上述场景?
或者,可以.set_index() 懒惰吗?如果.set_index() 方法可以懒惰地应用,我会用上面描述的步骤创建一个完整的计算图,最后,所有的东西都会并行同时计算(我想)。
【问题讨论】:
标签: python dataframe concurrency dask dask-distributed