这个问题是this answer的后续问题。出现以下情况时,Spark显示错误:
# Group results in 12 second windows of "foo", then by integer buckets of 2 for "bar"
fooWindow = window(col("foo"), "12 seconds"))
# A sub bucket that contains values in [0,2), [2,4), [4,6]...
barWindow = window(col("bar").cast("timestamp"), "2 seconds").cast("struct<start:bigint,end:bigint>")
results = df.groupBy(fooWindow, barWindow).count()
错误是:
"Multiple time window expressions would result in a cartesian product of rows, therefore they are currently not supported."
有什么方法可以达到预期的行为吗?在
我能够想出一个使用this SO answer改编的解决方案。在
注意:此解决方案仅在最多有一个调用
window
时有效,这意味着不允许有多个时间窗口。在spark github上快速搜索显示有一个<= 1
窗口的硬限制。在通过使用
withColumn
为每一行定义bucket,我们可以直接按新列分组:相关问题 更多 >
编程相关推荐