在 Spark Structured Streaming 中从中间读取现有多级分区文件数据的问题

Posted

技术标签:

【中文标题】在 Spark Structured Streaming 中从中间读取现有多级分区文件数据的问题【英文标题】:Problems in reading existing multilevel partitioned files data from from middle in Spark Structured Streaming 【发布时间】:2019-10-14 13:22:23 【问题描述】:

我正在使用现有的多级分区镶木地板文件作为源来处理结构化火花流。我在使用它时遇到以下问题。

启动 spark 流作业以从特定分区读取数据,而不是从头开始。

假设如果我们观察到分区 year=2018/month=10/hour=10 存在数据质量问题。现在假设我已经通过替换正确的文件更正了这些数据。

现在的问题是如何从今天开始而不是从头开始重新处理数据?因为在结构化流中可以说我使用文件流作为源,它将加载我想忽略的几个文件的所有文件。在这里,我还需要删除我的检查点目录,因为它到目前为止还存在偏移。

【问题讨论】:

【参考方案1】:

假设如果我们观察到分区 year=2018/month=10/hour=10 存在数据质量问题。那么如何重新处理从今天开始的数据,而不是从头开始呢?

我认为这在 Spark 结构化流中是不可能的(希望我弄错了)。

由于我们谈论的是流式查询,因此您必须倒回“流式”。实现它(我能想到的)的唯一方法是重新上传数据(不知道该怎么做)或简单地处理将“删除”分区year=2018/month=10/hour=10的先前版本的数据,然后上传一个新的修正版。

问题是如何通知 parquet 数据源应该从结果中“驱逐”已经处理的任何内容(可能已发送到外部源进行进一步处理)。

【讨论】:

嗨 Jacek 是的,我认为你说的是​​对的。我刚刚更正了我的问题,请您回答一下。假设我设法以某种方式纠正该数据,现在下一个问题是仅重新处理已纠正的文件,同时继续以文件为源的 spark 结构化流处理新文件。

以上是关于在 Spark Structured Streaming 中从中间读取现有多级分区文件数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂 超简单的 structured stream 源码解读

无法使用Spark Structured Streaming在Parquet文件中写入数据

如何使用Spark Structured Streaming连续监视目录

在 Spark Structured Streaming 中处理二进制数据

如何使用 Python 在 Spark Structured Streaming 中查看特定指标

Spark Structured Streaming - groupByKey 按分区单独