在spark中,我试图在同一个窗口中计算三个事务。由于我有另一个例子多次使用相同的窗口,因此需要花费太多时间。我缩短了我的例子,如下所示。是否可以在一个窗口函数中执行此操作,如下所示。正如预期的那样抛出错误......
val sonuc = data.withColumn("meanError",
struct(mean($"errorGeneral"),min($"errorGeneral")).over(
Window.partitionBy($"id").orderBy($"time".asc).rangeBetween(-240*3600,
0)))
感谢。
答案 0 :(得分:0)
没有错:
val w = Window.partitionBy($"id").orderBy($"time".asc).rangeBetween(-240*3600, 0)
data.select($"*"
mean($"errorGeneral").over(w),
min($"errorGeneral").over(w)
)
内部Spark必须洗牌并且只需订购一次。
如果这很慢,那是因为窗口函数是Spark中最昂贵的操作的顶部,特别是像这样的宽帧。