如何使用flink打印文件中的总行数

时间:2021-03-10 08:51:09

标签: apache-flink flink-streaming

我正在从 parquet 中读取行,因为我正在使用类似于 this one 的源函数,但是当我尝试计算正在处理的行数时,尽管作业已完成,但没有打印任何内容:

val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
lazy val stream: DataStream[Group] = env.addSource(new ParquetSourceFunction)
stream.map(_ => 1)                    
    .timeWindowAll(Time.seconds(180)) 
    .reduce( _ + _).print() 

1 个答案:

答案 0 :(得分:0)

问题在于您使用的是 ProcessingTime,因此基本上每当您使用 EventTime 文件完成时,Flink 都会发出带有 Long.Max 值的水印,以便所有窗口已关闭,但是在使用 ProcessingTime 时不会发生这种情况,所以简单地说 Flink 不会等待您的窗口关闭,这就是为什么您没有得到任何有价值的结果。

您可能想尝试切换到 DataSet API,这应该更适合您要完成的任务。

或者,您可以尝试使用 EventTime 并分配静态水印,因为最后的 Flink 仍然会发出带有 Long.Max 值的水印。

相关问题