Spark Structured Streaming Source 观察时间分区的 GCS 分区

问题描述

我正在尝试通过流式传输来自 GCS 的文件来设置结构化流式查询file stream source 的问题在于它会连接静态路径(包括通配符),但理想情况下我们希望从时间分区目录中查询文件

例如,我们的源文件被写入到像 gs://bucket-name/YYYY/mm/dd/HH/MM 这样的文件夹中(即)按作者的当前分钟分区。因此,假设写入的最大延迟为 5 分钟,那么我们知道分区 2021/03/05/00/00 将不会再收到 2021-03-05T00:05 之后的任何文件,并且在此时间之后可以忽略。但是对于文件源,如果我将全局路径提供为 gs://bucket-name/*/*/*/*/* 并且如果此作业运行一个月,它现在将在每个时间间隔列出跨 30 * 24 * 60 = 43200 个分区的文件,而不是仅轮询最后 5 个分钟。而且这个问题只会在文件或子分区的数量更多时变得更糟,我担心它会影响驱动程序的性能

BEAM 有一个使用 Watch 的动态轮询选项,这对我们来说是理想的使用 - 它允许定义路径以使用显式 STOP 条件动态查询

环顾四周,自定义流 v2 源 API 似乎自 3.0.0 (https://issues.apache.org/jira/browse/SPARK-25390) 以来发生了巨大变化,并且几乎没有/没有关于如何设置此类源的文档。 This blog 看起来很有希望,但不确定即使是当前的 API 是否足够稳定。

这里的另一个问题是,为了支持跨压缩编解码器的各种文件格式(AVRO、PARQUET、JSON),我需要在 PartitionReader 接口中重新实现读取器 - 如果我可以使用 v1,那将是理想的源读者就像 FileStreamSourcehere 一样。它还解决了从 GCS 读取大文件的任务分区问题(将它们拆分到多个任务中),我不需要担心。

鉴于这些要求,我正在寻找有关最佳前进道路的指导。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)