[英]PySpark - Upsample / Resample Time Series Data
是否有一种有效的方法可以对频率约为 13-15 分钟到 15 分钟的数据进行上采样/重新采样。 我有多个id
和 200M+ 行。
dataframe=spark.createDataFrame([("J1", "2019-12-29 12:07:38", 100), ("J1", "2019-12-29 12:24:25", 200),
("J1", "2019-12-29 12:37:58", 100), ("J8", "2020-09-09 13:06:36", 300),
("J8", "2020-09-09 13:21:37", 200), ("J8", "2020-09-09 13:36:38", 400)],
["id", "date_time", "some_value"]).show()
+---+-------------------+----------+
| id| date|some_value|
+---+-------------------+----------+
| J1|2019-12-29 12:07:38| 100|
| J1|2019-12-29 12:24:25| 200|
| J1|2019-12-29 12:37:58| 100|
| J8|2020-09-09 13:06:36| 300|
| J8|2020-09-09 13:21:37| 200|
| J8|2020-09-09 13:36:38| 400|
+---+-------------------+----------+
所需的数据帧:
+---+-------------------+----------+
| id| date|some_value|
+---+-------------------+----------+
| J1|2019-12-29 12:15:00| 100|
| J1|2019-12-29 12:30:00| 200|
| J1|2019-12-29 12:45:00| 100|
| J8|2020-09-09 13:00:00| 300|
| J8|2020-09-09 13:15:00| 200|
| J8|2020-09-09 13:30:00| 400|
+---+-------------------+----------+
有一个功能window
。 它生成start
和end
。 您可能需要应用另一个函数来选择最接近的函数。
from pyspark.sql import functions as F
df.withColumn("date_time", F.window("date_time", "15 minutes")["end"]).show()
+---+-------------------+----------+
| id| date_time|some_value|
+---+-------------------+----------+
| J1|2019-12-29 12:15:00| 100|
| J1|2019-12-29 12:30:00| 200|
| J1|2019-12-29 12:45:00| 100|
| J8|2020-09-09 13:15:00| 300|
| J8|2020-09-09 13:30:00| 200|
| J8|2020-09-09 13:45:00| 400|
+---+-------------------+----------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.