是否可以使用Spark DataFrame API实现有状态流处理?我想尝试的第一件事是对流进行重复数据删除。 DStream
有mapWithState
方法,但为了将其转换为DataFrame,我必须使用foreachRDD
:
dStream foreachRDD { rdd =>
val df = spark.read.json(rdd)
// Need to join with the state somehow
val unique = deduplicate(df)
val result = myFancyProcessingMethod(unique)
publish(result)
}
但是现在我们已经进入了一个没有流的概念(因此,它的状态)的领域,而且我被卡住了。
我能想到的唯一解决方案是重复数据删除原始DStream,然后才将其转换为DataFrames。这有几个缺点:我必须解析JSON两次,算法本身可以更有效地在DataFrame中实现(如果它是一次性任务)等等。还有其他方法吗?