TL;博士:
是否有可能.set_index()
方法在幾個DASK Dataframes並行同時?或者,是否有可能在幾個Dask數據幀上懶洋洋地插入.set_index()
,因此會導致並行地被設置爲?我可以.set_index()懶惰(或要併發執行),在Dask Dataframes?
下面是這種情況:
- 我有幾個時間序列
- 每個時間序列存儲的是幾個
.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()
方法可以延遲應用,我會創建一個完整的計算圖與上述步驟和最後,一切將並行計算
並行
(我認爲)。
謝謝你的及時回覆@MRocklin。我忘了說。我用'sorted = True'嘗試過,但它仍然非常慢(我在談論大約5年的數據,在很多情況下采樣率小於1秒)。即使在'len()'與分區數相匹配時,我也努力爭取使用「divisions = divisions」。但我仍然沒有足夠的時間進一步調查這個問題。但是,總結一下,從你的評論中,你可以說我不能在2個Dataframes上並行輕鬆調用'set_index()'?即使他們根本不相互關聯? –
如果您的數據已分類並且您知道分部,那麼您可以輕鬆調用set_index。您可能想了解有關部門的更多信息:http://dask.pydata.org/en/latest/dataframe-design.html#partitions – MRocklin