接收到的流上的 Spark 流式打印

Spark streaming print on received stream

我尝试实现的基本上是每次收到数据流时打印 "hello world"

我知道在每个流上我都可以调用函数 foreachRDD 但这对我没有帮助,因为:

  1. 可能是没有数据处理
  2. 我不想在每个rdd上打印hello,我想在整个流上打印hello(不管我是否收到数据)。

基本上,每次程序尝试获取数据时(它每 30 秒执行一次,可以说是因为火花流上下文)我想打印 hello。

有办法吗?是否有类似 Spark Streaming 的 onlisten 事件?

DStream 每个批次间隔(在您的情况下为 30 秒)将包含一个且仅一个 RDD,它在内部被多个分区分开。您可以检查它是否不为空,然后才打印 hello world:

// Create DStream from source
dstream.foreachRDD { rdd => if (!rdd.isEmpty) println("hello world") }