我正在尝试使用Spark流媒体(从Kafka读取)每分钟聚合并找到一些指标。我能够汇总该特定分钟的数据。如何确保我当天可以拥有一个桶并总结当天所有会议记录的总值?
我有一个数据框,我正在做类似的事情。
sampleDF = spark.sql("select userId,sum(likes) as total from likes_dataset group by userId order by userId")
答案 0 :(得分:1)
您可以使用" Watermarking"结构化流编程的功能
示例代码
import spark.implicits._
val words = ... // streaming DataFrame of schema { timestamp: Timestamp, word: String }
val windowedCounts = words
.withWatermark("timestamp", "10 minutes")
.groupBy(
window($"timestamp", "10 minutes", "5 minutes"),
$"word")
.count()
答案 1 :(得分:1)
我弄明白发生了什么。我在Spark中了解了状态流,这对我有所帮助。
我所要做的就是,
running_counts = countStream.updateStateByKey(updateTotalCount, initialRDD=initialStateRDD)
我必须写这个updateTotalCount函数来说明如何将旧聚合数据与微批量的新聚合数据合并。就我而言,更新功能如下所示:
def updateTotalCount(currentCount, countState):
if countState is None:
countState = 0
return sum(currentCount) + countState