Spark Streaming Scala:仅在滑动 window 完成时保存到文本文件

Spark Streaming Scala: save to text file only when sliding window is finished

我正在用 scala 开发一个 spark streaming 应用程序,现在我已经完成了我的第一个版本,我想提高性能。

我的 spark 应用程序目前在每批次上打印我的一些重要警报,这意味着我在几秒钟内生成了新的文本文件,而我更愿意执行计算但写入文件仅当我的滑动 window 在 10 分钟范围内到期时。

感兴趣的 rdd 示例如下:

val s = events.flatMap(_.split("\n")) //split block into lines of single json events
              .map(toMyObject) //convert raw json to MyObject
              .filter(checkCondition) //filter events based on condition
              .map(x => (x._1,1L)) //count alerts based on area
              .reduceByKeyAndWindow(_ + _, _ - _, Minutes(window_length), Seconds(sliding_interval), 2) //count alerts per area
              .repartition(1)
              .saveAsTextFiles("alerts")

正如我们在评论中讨论的那样:实施 non-overlapping window 幻灯片持续时间应与 window 持续时间相同。

即在上面的示例中,window 持续时间为 10 分钟,如果幻灯片持续时间也设置为 10 分钟 - 它将每 10 分钟生成一次文件,包括对这 10 分钟内所有数据的计算。