如何从MySQL广播数据并在流式批处理中使用它?

时间:2016-11-18 22:35:00

标签: apache-spark spark-streaming

//如何在每个流批处理期间从MYSQL DB获取属性并进行广播。

val sc = new SparkContext(sparkConf)
val ssc = new StreamingContext (sc, Seconds(streamingBatchSizeinSeconds))
val eventDStream=getDataFromKafka(ssc)
val eventDtreamFiltered=eventFilter(eventDStream,eventType)

1 个答案:

答案 0 :(得分:1)

无论您在getDataFromKafkaeventFilter中做了什么,我认为您都可以使用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
}

我知道!