我现在的做法是在分流之前汇总一下
new=old_stream.transform(lambda rdd,t:ssc.sc.parallelize(rdd.collect()))
如果old_stream是小数据,那还行,但是如果来个一次性几G日志分析,那collect就不行了。
个人觉得如果有分流的情况,解决方法有两种:
一种是从rdd层面解决,让他支持分支逻辑,这种复杂度太大了,数据共享在分布式系统一向都不好解决。
另一种就是从Streaming的层面解决,汇总一下再继续,因为Streaming的理念就是每次来点小RDD,一次次来计算。问题是如果汇总的数据过于庞大,那就后继乏力了。(一般不会出现这种情况,除非像我那样来个一次性分析)
又或者我们更改Streaming的api,让他compute出来的不再只是一个RDD,而是[rdd,rdd],把generateJob改成generateJobs。这时候我们就可以在汇总的地方,把那个汇总的大RDD给分割成N个小RDD。
spark的streaming我只看了api,在这个问题上他是怎么应对的我也不大了解,个人对java比较不感冒。
不知道dpark的目标是什么?是做一个python版的spark,还是一个借鉴rdd理念的python流计算系统。