Spark structured streaming 如何使用spark结构化流媒体从kafka连续传输数据?
我正在尝试将我的数据流api迁移到结构化流媒体,并反复思考如何等待或无法将微博客与结构化流媒体关联起来 在下面的代码中,我创建了直接流并永远等待,这样我就可以无限期地使用卡夫卡消息 如何在结构化流媒体中实现同样的效果 sparkSession.streams.WaitingAnyTermination是否足够 我在下面的流媒体和结构化流媒体中都添加了一个示例代码。任何指点都会很有帮助的。谢谢Spark structured streaming 如何使用spark结构化流媒体从kafka连续传输数据?,spark-structured-streaming,spark-streaming-kafka,Spark Structured Streaming,Spark Streaming Kafka,我正在尝试将我的数据流api迁移到结构化流媒体,并反复思考如何等待或无法将微博客与结构化流媒体关联起来 在下面的代码中,我创建了直接流并永远等待,这样我就可以无限期地使用卡夫卡消息 如何在结构化流媒体中实现同样的效果 sparkSession.streams.WaitingAnyTermination是否足够 我在下面的流媒体和结构化流媒体中都添加了一个示例代码。任何指点都会很有帮助的。谢谢 val kafkaParams = Map[String, Object]( "boot
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"auto.offset.reset" -> "latest",
"max.poll.records" -> "1",
"group.id" -> "test",
"enable.auto.commit" -> (true: java.lang.Boolean))
val ssc = new StreamingContext(sparkSession.sparkContext, Seconds(10))
val stream = KafkaUtils.createDirectStream[String, String](ssc, PreferConsistent,Subscribe[String, String]("mytopic",kafkaParams))
performRddComputation(stream, sparkSession)
ssc.start()
ssc.awaitTermination()
结构化流媒体等价物
我将发布一个适合我的版本:
val df = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("kafkfa.offset.strategy","latest")
.option("subscribe", "mytopic")
.load()
//df.printSchema()
val tdf = df.selectExpr("CAST(value AS STRING)")
.select("value")
.writeStream
.outputMode("append")
.format("console")
.option("truncate","false")
.start()
tdf.awaitAnyTermination()
它应该适合你我将发布一个适合我的版本:
val df = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("kafkfa.offset.strategy","latest")
.option("subscribe", "mytopic")
.load()
//df.printSchema()
val tdf = df.selectExpr("CAST(value AS STRING)")
.select("value")
.writeStream
.outputMode("append")
.format("console")
.option("truncate","false")
.start()
tdf.awaitAnyTermination()
它应该适用于您如果您只有一个查询,只需在查询中使用
即可:
val df = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("kafkfa.offset.strategy","latest")
.option("subscribe", "mytopic")
.load()
df.printSchema()
val tdf = df.selectExpr("CAST(value AS STRING)").as[String]
.select("value")
.map(record => {//do something})
.writeStream
.format("console")
.option("truncate","false")
.start()
// do something
tdf.awaitTermination()
waittermination
是一个阻塞调用,因此在此之后编写的任何内容都将仅在查询终止后调用
如果需要处理多个查询,可以在StreamingQueryManager
上使用等待任何终止
:
sparkSession.streams.awaitAnyTermination()
如果您想在其中一个查询失败的情况下保持应用程序运行,则在循环中调用waitanytermination()
,然后调用resetTerminated()
如果只有一个查询,只需对查询使用
val df = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("kafkfa.offset.strategy","latest")
.option("subscribe", "mytopic")
.load()
df.printSchema()
val tdf = df.selectExpr("CAST(value AS STRING)").as[String]
.select("value")
.map(record => {//do something})
.writeStream
.format("console")
.option("truncate","false")
.start()
// do something
tdf.awaitTermination()
waittermination
是一个阻塞调用,因此在此之后编写的任何内容都将仅在查询终止后调用
如果需要处理多个查询,可以在StreamingQueryManager
上使用等待任何终止
:
sparkSession.streams.awaitAnyTermination()
如果您想在其中一个查询失败的情况下保持应用程序运行,则在循环中调用waitanytermination()
,然后调用resetTerminated()