实木复合地板文件输出接收器-Spark结构化流

时间:2019-03-27 17:27:34

标签: apache-spark spark-structured-streaming

想知道是什么(以及如何修改)会触发Spark Sturctured流查询(已配置Parquet File输出接收器)以将数据写入Parquet文件。我定期输入Stream输入数据(使用StreamReader读入文件),但是对于每个作为输入提供的文件,它不会将输出写入Parquet文件。一旦给了它几个文件,它就倾向于编写一个Parquet文件。

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

注意:我在Read Stream调用中将maxFilesPerTrigger设置为1。我还看到流查询处理单个输入文件,但是输入中的单个文件似乎不会导致流查询将输出写入Parquet文件

1 个答案:

答案 0 :(得分:1)

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

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

我相信-Parquet File接收器不允许使用Update模式,但是在切换到ForEach输出接收器之后,使用Update模式时,我观察到了数据按预期从接收器中出来。本质上,每条记录至少有一个记录没有延迟(如前所述)。

希望这对其他人有帮助。