use*_*849 19 apache-spark spark-streaming rdd
我们正在开发Spark框架,其中我们将历史数据移动到RDD集合中.
基本上,RDD是我们进行操作的不可变的只读数据集.基于此,我们已将历史数据移至RDD,并在此类RDD上进行过滤/映射等计算.
现在有一个用例,RDD中的数据子集得到更新,我们必须重新计算这些值.
HistoricalData采用RDD的形式.我根据请求范围创建另一个RDD,并在ScopeCollection中保存该RDD的引用
到目前为止,我已经能够想到以下方法 -
方法1:广播变化:
方法2:为更新创建RDD
方法3:
我曾想过创建流RDD,我不断更新相同的RDD并进行重新计算.但据我所知,它可以从Flume或Kafka获取流.而在我的情况下,值是基于用户交互在应用程序本身中生成的.因此,我无法在上下文中看到流RDD的任何集成点.
关于哪种方法更好或任何其他适合此方案的方法的任何建议.
TIA!
这里介绍的用例与Spark Streaming非常匹配.另外两个选项带有一个问题:"你如何提交重新计算RDD?"
Spark Streaming提供了一个框架,可以根据传入的数据流不断向Spark提交工作,并以RDD格式保存该数据.Kafka和Flume只是两种可能的Stream源.
您可以使用SocketInputDStream进行 Socket通信,使用FileInputDStream读取目录中的文件,甚至使用QueueInputDStream使用共享Queue .如果这些选项都不适合您的应用程序,您可以编写自己的InputDStream.
在此用例中,使用Spark Streaming,您将读取基础RDD并使用传入的dstream逐步转换现有数据并保持不断变化的内存状态.dstream.transform
将允许您将基本RDD与在给定批处理间隔期间收集的数据相结合,同时该updateStateByKey
操作可帮助您构建由密钥寻址的内存中状态.有关详细信息,请参阅文档.
如果没有关于应用程序的更多细节,很难使用Spark Streaming来达到代码级别.我建议你探索这条道路并为任何特定主题提出新问题.
归档时间: |
|
查看次数: |
5260 次 |
最近记录: |