镶木地板文件输出接收器 - Spark 结构化流式处理



想知道什么(以及如何修改)触发 Spark 结构流式处理查询(配置了 Parquet 文件输出接收器)将数据写入镶木地板文件。 我定期提供 Stream 输入数据(使用 StreamReader 读取文件),但它不会将作为输入提供的每个文件的输出写入 Parquet 文件。 一旦我给了它几个文件,它往往会写一个镶木地板文件就可以了。

我想知道如何控制这一点。 我希望能够为作为输入提供的每个新文件强制对 Parquet 文件进行新的写入。 任何提示表示赞赏!

注意:我在读取流调用中将最大文件每个触发器设置为 1。 我还看到流查询处理单个输入文件,但是输入上的单个文件似乎不会导致流查询将输出写入 Parquet 文件

经过进一步分析,并使用默认追加模式使用 ForEach 输出接收器,我相信我遇到的问题是追加模式与水印功能的组合。

重新读取 https://spark.apache.org/docs/2.2.1/structured-streaming-programming-guide.html#starting-streaming-queries 后,似乎当追加模式与水印集一起使用时,Spark 结构化流不会将聚合结果写出到 Result 表中,直到水印时间限制过后。 追加模式不允许更新记录,因此它必须等待水印过去,以确保不会更改行...

我相信 - Parquet 文件接收器不允许更新模式,在切换到 ForEach 输出接收器并使用更新模式后,我观察到数据按预期从接收器中流出。 基本上对于每个记录输入,至少一个记录输出,没有延迟(如前所述)。

希望这对其他人有帮助。

最新更新