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 分钟内所有数据的计算。
我正在用 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 分钟内所有数据的计算。