使用Spark结构化流从目录中读取读取内容时,如何实施一次精确处理?

时间:2019-02-25 05:48:14

标签: apache-spark apache-kafka spark-structured-streaming

我想使用流处理的概念从本地目录中读取文件,然后发布到Apache Kafka。我考虑过使用Spark结构化流。

在读取文件的50行后流式传输失败时,如何实现检查点。下次启动时是从文件的第51行开始还是从文件的开头再次读取?

如果在代码中进行任何升级或更改时,如果在结构化流中使用检查点,还会有任何问题。

1 个答案:

答案 0 :(得分:1)

  

当读取文件的50行后流式传输失败时。下次启动时是从文件的第51行开始,还是从文件的开头再次读取。

整个文件已被完全处理,或者根本没有处理。这就是FileFormat通常在Spark SQL中的工作方式,尤其与Spark结构化流无关(因为它们共享底层的执行基础结构)。

简而言之,引擎“将再次从文件开头读取它。”

这也表示在Spark结构化流中处理文件时没有一行的概念。您可以一次处理作为一个完整文件(或什至几个文件)的流式DataFrame,而是否要逐行处理数据集还是由Spark开发人员来决定是整个处理数据集。

  

如果在代码中进行任何升级或更改时,如果在结构化流中使用检查点,还会有任何问题。

理论上,您不应该这样做。与传统的Spark Streaming相比,Spark结构化流中新的检查点机制的目的是允许以更舒适的方式重新启动和升级。该检查点仅使​​用少量信息(通常存储在JSON文件中)来从上一个成功的检查点开始重新开始处理。