如何将Spark用于增量数据

时间:2018-03-24 11:41:52

标签: scala apache-spark spark-streaming

我正在与Spark(Scala)合作执行每周发生的批处理过程。 每天,我们都会使用以下架构每日提供销售数据: 日,产品,销售

每周,我们都想导入当周的所有日常数据,汇总每日销售额,以查找每种产品的每周平均销售额。然后,我们使用以下标头导出文件: 周,产品,sales_average (我们将其与之前的每周汇总合并)

这里的问题是我们可以收到已经计算过的聚合的更新。例如,假设我们在第1周,我们已经计算了该周每个产品的每周平均值。 在下周(第2周),我可以收到每日销售行,其中Day列指的是前一周(第1周)而不是Week2。因此,相应产品的已计算的Week1值不再准确,我们需要再次获取该周和该产品的所有每日数据并再次进行聚合。

最直接(也是最差)的解决方案是每周导入所有数据并计算所有聚合。这显然会导致性能瓶颈,特别是我们处理的是2年的数据。我想做的是:

  • 计算当前(新周)的汇总(平均值)
  • 重新计算我们有更新的最后几周的聚合(不是所有数据:我们只会考虑已更新的一周的每日数据)。

我已经阅读了一些关于结构化流媒体编程,时间窗口,但我是Spark的新手,这一切都让人觉得有些复杂。 所以任何有关如何解决这个问题的帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)