我正在尝试使用多个查询来写入Spark中的不同接收器。第一个查询有效,并且输出被写入接收器,但是第二个无效。
有人能指出我的错误吗?
val spark = SparkSession
.builder
.appName("StructuredNetworkWordCount")
.getOrCreate()
import spark.implicits._
val source = spark.readStream
.format("socket")
.option("host", "localhost")
.option("port", 9999)
.load()
.as[String]
.map {e =>
println(e)
e
}
// With Multiple Queries
val q1 = source.writeStream.outputMode("append").format("console")
.trigger(Trigger.ProcessingTime(1000))
.start()
println(q1)
val q2 = source.writeStream.outputMode("append")
.format("csv")
.option("path", "output.csv")
.option("checkpointLocation", "/tmp/checkpoint/test")
.trigger(Trigger.ProcessingTime(1000))
.start()
println(q2)
spark.streams.awaitAnyTermination()
控制台接收器正在运行,但CSV接收器未写入输出。如果我更改顺序,则csv接收器将起作用,但不会起作用。
答案 0 :(得分:3)
我假设您正在使用netcat或类似的实用程序来生成数据。此类实用程序的设计目的不是可重播的,并且不提供持久层,因此一旦使用,数据将被不可逆转地销毁。
因此,第二个流将监听更改,但是没有数据将到达它。