在结构化流的StreamingQueryListener onQueryProgress方法中处理数据是否是一种好习惯?

时间:2019-10-31 06:23:23

标签: apache-spark spark-structured-streaming

我正在从kafka读取数据并对其进行一些汇总,然后保存到hdfs。我想将此数据与已写入同一目录中的hdfs的过去数据合并。由于过去的数据将不断更新,因此我无法将其与新数据连接,也无法对新数据执行聚合,因为结构化Streaming2.3.0不支持该聚合。根据文档

As of Spark 2.3, you cannot use other non-map-like operations before joins. Here are a few examples of what cannot be used.

Cannot use streaming aggregations before joins.

我已经尝试过进行流-流联接,但是那不起作用,因为我也想聚合新数据。所以我正在加入StramQueryListener的onQueryProgress方法。我只看到它在发布统计信息中的用途。这是在侦听器中处理数据的好习惯吗?如果没有,那有什么替代方法。

override def onQueryProgress(event: StreamingQueryListener.QueryProgressEvent): Unit = {
   if(event.progress.numInputRows > 0 && event.progress.sink.description.startsWith("FileSink") && event.progress.sink.description.contains(outputPath)) {
          processFlag = 0
   }
   if(event.progress.numInputRows == 0 && event.progress.sink.description.startsWith("FileSink") && event.progress.sink.description.contains(outputPath) && processFlag == 0) {
     "processing here"
     processFlag = 1
   }

我正在获取每小时的数据,因此我有足够的窗口来处理数据。而且由于侦听器是在单独的线程中启动的,所以它也是非阻塞代码。

0 个答案:

没有答案