pyspark中的增量批处理

时间:2020-09-02 21:46:01

标签: apache-spark pyspark

在我们的spark应用程序中,我们每天运行多个批处理。这些批处理过程的来源不同,例如Oracle,mongoDB,文件。我们将根据源存储不同的增量处理值,例如某些oracle表的最新时间戳,某些oracle表的ID,某些文件系统的列表并将这些值用于下一次增量运行。

当前,这些偏移值的计算取决于源类型,每次添加新的源类型时,我们都需要自定义代码以存储该值。 是否有任何通用方法可以解决此问题,例如流式传输中的检查点。

1 个答案:

答案 0 :(得分:0)

我总是喜欢查看最后写入的分区的目标,或者获取一些max(primary_key),然后根据该值从源数据库中选择要在当前运行期间写入的数据。

不需要存储任何东西,您只需要向批处理算法提供表名,源类型和主键/时间戳列即可。然后,该算法将找到您已经拥有的最新值。

这实际上取决于您的负载原理以及存储空间的划分方式。如果您有原始/源/准备好的图层。一个好主意是以原始格式加载数据,可以轻松地将其与原始源进行比较,以完成我上面所述的操作。

替代方法包括:

  • 写一个包含该主列和最新值的文件,您的批处理作业将读取该文件以确定下一步要读取什么。
  • 使用与最新值相对应的参数更新作业执行配置,以便在下次运行时将最新值传递给算法。