火花流多个来源,重新加载dataFrame



我在10秒间隔内有一个来自Kafka的火花流上下文阅读事件数据。我想将此事件数据与Postgres表中存在的数据进行补充。

我可以用以下内容加载Postgres表格。

val sqlContext = new SQLContext(sc)
val data = sqlContext.load("jdbc", Map(
  "url" -> url,
  "dbtable" -> query))

...

val broadcasted = sc.broadcast(data.collect())

和以后我可以这样跨越:

val db = sc.parallelize(data.value)
val dataset = stream_data.transform{ rdd => rdd.leftOuterJoin(db)}

我想保持当前的数据流运行,并且每隔6个小时仍然重新加载该表。由于目前Apache Spark不支持多个运行上下文,该如何完成?有解决方法吗?还是我需要每次重新加载数据时都需要重新启动服务器?这似乎是一个简单的用例...:/

在我的拙见中,设计不建议在Dstreams上重新加载另一个数据源。

与传统的stateful流处理模型相比,D-Streams旨在将流计算作为一系列statelessdeterministic批处理计算构建流量计算。

Dstreams上的转换是确定性的,此设计可以通过重新计算从故障中快速恢复。令人耳目一新将带来副作用,以恢复/重新计算。

一个解决方法是将查询推迟到输出操作: foreachRDD(func)

相关内容

  • 没有找到相关文章

最新更新