我有一个现有的应用程序,它将客户数据表示为Spark 1.6流媒体作业中的图形集合,多个
每个客户的图表。作业无限期运行,随着时间的推移更新每个图形中的值。也就是说,我们的RDD是一个
密钥值RDD,如RDD[(graphId, graph)]
。创建流以将排队的消息应用于RDD中的图形
在每批中。
如果我想将客户添加到正在运行的作业中,是否有Spark方法可以执行此操作? RDD是不可变的,因此排除规则
将客户的图表添加到现有RDD。不支持添加具有关联输入队列的新流,因此
这排除了为新客户添加新流的上下文。 (Adding new inputs, transformations, and output operations after starting a context is not supported
)
如果a中支持spark.driver.allowMultipleContexts
,则支持为每个客户添加新上下文
生产环境。
在最糟糕的情况下,我可以保存现有客户的图表,停止流,创建一个新的RDD,包括新的 客户的数据,并启动一个新的流。但是,这有两个问题 - 它会破坏现有的处理 客户,并随着客户数量的增长限制可扩展性。
有没有办法创建一个包含现有图形和新cutomer图形的新RDD,然后使用该RDD 在正在运行的流中替换旧的?在较新版本的Spark中是否有选项,特别是2.1?