如何使用具有火花数据流结构的非基于时间的窗口?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用具有火花数据流结构的非基于时间的窗口?相关的知识,希望对你有一定的参考价值。

我正在尝试使用带有spark和kafka的结构化流媒体窗口。我在非基于时间的数据上使用窗口,因此我收到此错误:

'Non-time-based windows are not supported on streaming DataFrames/Datasets;;
Window

这是我的代码:

window = Window.partitionBy("input_id").orderBy("similarity")
outputDf = inputDf
        .crossJoin(ticketDf.withColumnRenamed("IDF", "old_IDF")) 
        .withColumn("similarity", cosine_similarity_udf(col("IDF"), col("old_IDF"))) 
        .withColumn("rank", rank().over(window)) 
        .filter(col("rank") < 10)

所以我正在寻找一个提示或参考,以便在非基于时间的数据上使用窗口......

答案

Windows总是需要基于时间的数据,但Spark Structured Streaming没有。

您可以使用触发器“as_soon_as_posible”创建Spark Structured Streaming,并且可以按窗口对数据进行分组,该组是准时的。

参考:https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#window-operations-on-event-time

另一答案

确实窗口只是基于时间......

对于应用,我避免避免使用烧瓶。我已经找了很长时间才能使用流媒体系统......现在我正在使用Kafka,它适用于我的应用程序! :)

我有这个资源与您分享有关结构化流媒体的不支持的操作:https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#unsupported-operations

以上是关于如何使用具有火花数据流结构的非基于时间的窗口?的主要内容,如果未能解决你的问题,请参考以下文章

具有不同窗口规范的链式火花列表达式产生低效的 DAG

基于索引的非重叠滑动窗口

如何将火花数据输出到具有单独列的 csv 文件?

将具有枚举成员的非托管结构编组到 c#

如何在火花中合并或连接具有不相等列号的数据框

如何通过熊猫或火花数据框删除所有行中具有相同值的列?