//如何在每个流批处理期间从MYSQL DB获取属性并进行广播。
val sc = new SparkContext(sparkConf)
val ssc = new StreamingContext (sc, Seconds(streamingBatchSizeinSeconds))
val eventDStream=getDataFromKafka(ssc)
val eventDtreamFiltered=eventFilter(eventDStream,eventType)
答案 0 :(得分:1)
无论您在getDataFromKafka
和eventFilter
中做了什么,我认为您都可以使用DStream
。这就是您的未来计算的描述方式以及您有RDD
处理的每个批处理间隔。
你的问题的答案很大程度上取决于你究竟想要做什么,但是让我们假设你完成了对Kafka记录的流处理并且你想做某事与他们合作。
如果foreach
可以接受,您可以执行以下操作:
// I use Spark 2.x here
// Read attributes from MySQL
val myAttrs = spark.read.jdbc([mysql-url-here]).collect
// Broadcast the attributes so they're available on executors
val attrs = sc.broadcast(myAttrs) // do it once OR move it as part of foreach below
eventDtreamFiltered.foreach { rdd =>
// for each RDD reach out to attrs broadcast
val _attrs = attrs.get
// do something here with the rdd and _attrs
}
我知道!