1

我正在从事一个涉及一些大于内存的数据集的项目,并且一直在评估用于在集群上而不是在我的本地机器上工作的不同工具。一个看起来特别有趣的项目是 dask,因为它的 DataFrame 类具有与 pandas 非常相似的 API。

我想汇总时间序列相关数据的时间导数。这显然需要按时间戳对时间序列数据进行排序,以便您在行之间取得有意义的差异。但是,dask DataFrames 没有sort_values方法。

在使用 Spark DataFrame 和使用Window函数时,对分区内的排序提供了开箱即用的支持。也就是说,您可以执行以下操作:

from pyspark.sql.window import Window
my_window = Window.partitionBy(df['id'], df['agg_time']).orderBy(df['timestamp'])

然后我可以使用这个窗口函数来计算差异等。

我想知道是否有办法在 dask 中实现类似的东西。原则上,我可以使用 Spark,但我有点时间紧迫,而且我对它的 API 的熟悉程度远不如对 pandas 的熟悉。

4

1 回答 1

1

您可能希望将 timeseries 列设置为index

df = df.set_index('timestamp')

这允许更智能的时间序列算法,包括滚动操作、随机访问等。您可能想查看http://dask.pydata.org/en/latest/dataframe-api.html#rolling-operations

请注意,通常设置索引和执行完整排序可能会很昂贵。理想情况下,您的数据以已经按时间排序的形式出现。

例子

因此,在您的情况下,如果您只想计算导数,您可能会执行以下操作:

df = df.set_index('timestamp')
df.x.diff(...)
于 2017-12-22T17:43:48.170 回答