结构化流2.1.0 Foreach未调用

时间:2017-03-28 21:29:05

标签: apache-spark spark-structured-streaming

我正在尝试使用Kafka在纱线群集上测试结构化流媒体的预测并获得这段代码:

  val ds1 = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "data01:9092,data02:9092,data03:9092")
  .option("subscribe", "cluster-topic-01")
  .load()


  /* This block works
  val query = ds1.writeStream
        .format("console")
        .start()
  */

  // this block doesn't have any call to open()
  val query = ds1.writeStream.foreach(new ForeachWriter[Row] {
          override def open(partitionId: Long, version: Long): Boolean = {
                println("open("+partitionId+","+version+")")
                true
          }

          override def process(record: Row) : Unit = {
            // write string to connection
                println("process() :: "+record)
          }

          override def close(errorOrNull: Throwable): Unit = {
            // close the connection
                println("close()")
          }
  }).start()

  query.awaitTermination()

当我运行此程序时,没有调用open()。我比较了其他线程中的其他示例,但我无法找出缺失的内容。在foreach之后有一个start()调用,它似乎与文档here匹配。

我可以流式传输到文件或控制台,但无法在foreach中接听任何电话。

有关何处查看的任何建议? TIA。

1 个答案:

答案 0 :(得分:0)

openprocessclose将在RDD.foreach等执行程序中运行,因此除非使用本地模式,否则无法看到它。< / p>