我正在尝试使用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。
答案 0 :(得分:0)
open
,process
和close
将在RDD.foreach
等执行程序中运行,因此除非使用本地模式,否则无法看到它。< / p>