#29199·polars

当抵消时滚动计算错误的窗口不是否定周期(在记忆引擎)

作者: JakubValtar创建于 2026年9月7日更新于 2026年9月17日
标签bugpythonA-temporalacceptedP-highA-rolling

检查

  • 我检查过这个问题还没有报告。
  • 我确认在极地的最新版本上存在这个错误.
  • 可复制的例子
zz
从日期导入日期时间

导入极为 pl


df 滚动(ts, 周期, 偏移, 时间  sone):
lf = pl. LazyFrame ({'t: ts}) (中文(简体) ).
如果时间( zone)不是无:
lf=. with colns (pl.col ("t").dt.replace time zone (time zone)) (中文(简体) ).
如果=lf.rolling(index co栏="t"),期间=期间,冲抵=抵销. agg(pl.len ()).
返回 lf. collect () ["len"].to list (), lf. collect (engine="流") ["len"].to list ()


# 第1号案件 -- -- 日历月。
# t 的行窗口是(t + 相抵,t + 相抵 + 期间):
#2024-03-01- > (2024-02-01,2024-02-29) - > 0
#2024-03-31-> (2024-02-29, 2024-03-28)-> 1 (2024-03-01) (中文(简体) ).
#2024-04-01-> (2024-03-01, 2024-03-29) (中文(简体) ).
mem, 溪流 = 滚动 ()
[日期时间(2024,3,1),日期时间(2024,3,31),日期时间(2024,4,1)],"28d","-1mo".
(中文(简体) ).
print(f"month in-memory {memm} streaming {stream} 期望= [0, 1, 0]").

# 第2个案例 -- -- 防日. swit="-1d", 句号="24h", 欧洲/阿姆斯特丹.
# 时钟前进 2024-03-31 02:00 - > 03:00,日历日为23小时,
# 2024-03-31 00:00 + 24h 在2024-04-01:00登陆. Fort = 2024-04-01:00 窗口为:
# (2024-03-31 00:00, 2024-04-01-01:00) (中文(简体) ).
2024-04-01 00:00和2024-04-01:00 - > 2. 联合国
mem, 溪流 = 滚动 ()
[日期时间(2024年;3年;31年);日期时间(2024年;4年;1年);日期时间(2024年;4年;1年);
"24小时"
"1","1","1","1","1"
时 zone="欧洲/阿姆斯特丹",
(中文(简体) ).
print(f"st" in-emory {memm} streaming}\ stream} expect= [1, 2, 2]") 页面存档备份,存于互联网档案馆 页面存档备份,存于互联网档案馆 页面存档备份,存于互联网档案馆

XQ 日志输出

贝壳 月入分数= [1, 2, 2] 流出数= [0, 1, 0] 预期数= [0, 1, 0] dst in-memory=[1, 1, 2] 流化= [1, 2, 2] 预期= [1, 2, 2]


* 问题说明

由代理人报告,同时实施分布式滚动。

< 细节>

内相引擎在每次抵消时都会给出错误的窗口内容,而时间段则是不同的持续时间,恰好共享了相同的纳米秒估计. 流出引擎在上述两种情况下都是正确的.

原因包括三个步骤:

1. 期限:期限 ns()是一种估计——每月得分等于28天,一天得分等于86,400 s,因此对可变月份长度和DST都视而不见。
2. Group by values在soft.duration ns() ==========================================================================================================================================================================================================================================
3. 该路径假设t是窗口的右边缘并取取捷径让上=t,其自己的评论说明了它需要的前提条件:"我们有期==-offset". 当先决条件实际上没有被持有时,每个窗口都会得到错误的上限.

-1mo vs 28d和 -1d vs 24h 两者都满足了第2步而不反向,这就是为什么两个不相干相干的投入同样失败的原因. 错误方向取决于日历单位是长还是短
. . . . . . .