【发布时间】:2020-04-23 16:32:39
【问题描述】:
我有一个 pyspark 数据框,示例行如下。我试图在 10 分钟内获得最大平均值。我正在尝试使用Window函数,但无法达到结果。
这是我的数据框,其中包含 30 分钟的随机数据。我希望输出 3 行,每 10 分钟 1 行。
+-------------------+---------+
| event_time|avg_value|
+-------------------+---------+
|2019-12-29 00:01:00| 9.5|
|2019-12-29 00:02:00| 9.0|
|2019-12-29 00:04:00| 8.0|
|2019-12-29 00:06:00| 21.0|
|2019-12-29 00:08:00| 7.0|
|2019-12-29 00:11:00| 8.5|
|2019-12-29 00:12:00| 11.5|
|2019-12-29 00:14:00| 8.0|
|2019-12-29 00:16:00| 31.0|
|2019-12-29 00:18:00| 8.0|
|2019-12-29 00:21:00| 8.0|
|2019-12-29 00:22:00| 16.5|
|2019-12-29 00:24:00| 7.0|
|2019-12-29 00:26:00| 14.0|
|2019-12-29 00:28:00| 7.0|
+-------------------+---------+
我正在使用下面的代码
window_spec = Window.partitionBy('event_time').orderBy('event_time').rangeBetween(-60*10,0)
new_df = data.withColumn('rank', rank().over(window_spec))
new_df.show()
但是这段代码给了我以下错误:
pyspark.sql.utils.AnalysisException: 'Window Frame specifiedwindowframe(RangeFrame, -600, currentrow$()) must match the required frame specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$());'
我想要的输出是
+-------------------+---------+
| event_time|avg_value|
+-------------------+---------+
|2019-12-29 00:06:00| 21.0|
|2019-12-29 00:16:00| 31.0|
|2019-12-29 00:22:00| 16.5|
+-------------------+---------+
有人可以帮我解决这个问题吗?
TIA。
【问题讨论】:
标签: dataframe apache-spark pyspark