【发布时间】:2015-07-24 19:46:21
【问题描述】:
我有一个 spark 流上下文,每隔 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 目前不支持多个运行上下文,我该如何实现呢?有什么解决方法吗?还是每次我想重新加载数据时都需要重新启动服务器?这似乎是一个简单的用例......:/
【问题讨论】:
-
我也在寻找这个问题的答案,你成功了吗,@user838681?
-
当你重新加载 postgres 表时,你是否关心过去的 kafka 事件,或者你只是想从 postgres 的最新重新加载发生的时间开始加入新的 kafka 数据?
-
@HamelKothari 无需更新或重新处理过去的 Kafka 事件。当我更新 SQL 表时,我只想在 Kafka 的任何未来事件中使用它。
-
@ClemensValiente 创建一个简单的对象来包装 rdd 并定期更新它还不够吗?
标签: postgresql apache-spark spark-streaming apache-spark-sql