如何在不排序的情况下在 Dask 中执行时间导数
How to perform time derivatives in Dask without sorting
我正在从事一个涉及一些大于内存的数据集的项目,并且一直在评估用于在集群而不是本地机器上工作的不同工具。一个看起来特别有趣的项目是 dask,因为它的 DataFrame class.
与 API 非常相似 pandas
我想对时间序列相关数据的时间导数进行汇总。这显然需要按时间戳对时间序列数据进行排序,以便您在行之间获取有意义的差异。但是,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'])
然后我可以使用这个 window 函数来计算差异等
我想知道是否有办法在 dask 中实现类似的功能。原则上,我可以使用 Spark,但我有点时间紧迫,而且我对它 API 的熟悉程度远低于 pandas.
您可能希望将时间序列列设置为您的 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(...)
我正在从事一个涉及一些大于内存的数据集的项目,并且一直在评估用于在集群而不是本地机器上工作的不同工具。一个看起来特别有趣的项目是 dask,因为它的 DataFrame class.
与 API 非常相似 pandas我想对时间序列相关数据的时间导数进行汇总。这显然需要按时间戳对时间序列数据进行排序,以便您在行之间获取有意义的差异。但是,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'])
然后我可以使用这个 window 函数来计算差异等
我想知道是否有办法在 dask 中实现类似的功能。原则上,我可以使用 Spark,但我有点时间紧迫,而且我对它 API 的熟悉程度远低于 pandas.
您可能希望将时间序列列设置为您的 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(...)