我在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旨在将流计算作为一系列stateless
,deterministic
批处理计算构建流量计算。
Dstreams上的转换是确定性的,此设计可以通过重新计算从故障中快速恢复。令人耳目一新将带来副作用,以恢复/重新计算。
一个解决方法是将查询推迟到输出操作: foreachRDD(func)
。