tl; dr:
是否可以同时在几个Dask Dataframes并行上使用.set_index()
方法?或者,是否有可能.set_index()
懒惰地在几个Dask数据帧上,这会导致索引同时设置并行?
以下是该方案:
.csv
文件。每个文件都包含与特定日期相关的数据。此外,文件分散在不同的文件夹中(每个文件夹包含一个月的数据)DateTime
的列。DateTime
对齐。为此,我需要首先resample()
每个和所有时间序列到一个共同的采样率。然后.join()
所有时间序列。.resample()
只能应用于索引。因此,在重新采样之前,我需要在每个时间序列的DateTime列上.set_index()
。.set_index()
方法时,计算立即开始。这导致我的代码被阻止并等待。此时,如果我检查我的机器资源使用情况,我可以看到正在使用许多核心,但使用率不超过~15%。这让我觉得,理想情况下,我可以将.set_index()
方法同时应用于多个时间序列。在达到上述情况后,我尝试了一些不优雅的解决方案来并行化.set_index()
方法在多个时间序列中的应用(例如创建 multiprocessing.Pool
) ,哪些都没有成功。在详细介绍这些问题之前,如何解决上述情况有一个干净的方法吗?在实现Dask时,上述场景是否在某种程度上被考虑?
或者,是否有可能.set_index()
懒惰?如果.set_index()
方法可以懒惰地应用,我会用上面描述的步骤创建一个完整的计算图,最后,所有内容都将同时计算并行(我认为)。
答案 0 :(得分:0)
Dask.dataframe需要知道数据帧的所有分区的最小值和最大值,以便合理地并行执行日期时间操作。默认情况下,它会读取数据一次,以便找到好的分区。如果数据没有排序,那么它将进行排序(可能非常昂贵)进行排序
在您的情况下,听起来您的数据已经排序,并且您可以明确地提供这些数据。您应该查看dd.DataFrame.set_index
docstring
A common case is when we have a datetime column that we know to be
sorted and is cleanly divided by day. We can set this index for free
by specifying both that the column is pre-sorted and the particular
divisions along which is is separated
>>> import pandas as pd
>>> divisions = pd.date_range('2000', '2010', freq='1D')
>>> df2 = df.set_index('timestamp', sorted=True, divisions=divisions) # doctest: +SKIP