我正在尝试使用spark stream来处理一些order
流,我在流中有一些buyer_id
order
的先前计算功能。
我需要在Spark Streaming运行时获得这些功能。
现在,我将buyer_id
功能存储在配置单元表中并将其加载到RDD
和
val buyerfeatures = loadBuyerFeatures()
orderstream.transform(rdd => rdd.leftOuterJoin(buyerfeatures))
获得预先计算的特征。
另一种处理此问题的方法是将功能保存到hbase
表中。每隔buyer_id
开火一次。
哪一个更好?或者我可以用另一种方式解决这个问题。
答案 0 :(得分:0)
根据我的短暂经历:
在开始流式上下文之前,应该为计算加载必要的数据:
所以,如果你的数据已经计算好了,那么"小"足够的,在广播变量中加载它在程序的开头,或者甚至更好地在最终变量中加载它。要么是这个,要么在 DStream之前创建一个RDD 并保留它作为引用(看起来就像你现在正在做的那样),尽管记得要缓存它(总是如果你有足够的空间)。
如果你确实需要在流媒体时间阅读它(也许你从流中收到了你的查询密钥),那么尝试在foreachPartition
中执行一次并将其保存在本地变量中。