Spark流式获取预先计算的功能

时间:2016-06-13 02:28:35

标签: spark-streaming

我正在尝试使用spark stream来处理一些order流,我在流中有一些buyer_id order的先前计算功能。

我需要在Spark Streaming运行时获得这些功能。

现在,我将buyer_id功能存储在配置单元表中并将其加载到RDD

val buyerfeatures = loadBuyerFeatures() orderstream.transform(rdd => rdd.leftOuterJoin(buyerfeatures)) 获得预先计算的特征。

另一种处理此问题的方法是将功能保存到hbase表中。每隔buyer_id开火一次。

哪一个更好?或者我可以用另一种方式解决这个问题。

1 个答案:

答案 0 :(得分:0)

根据我的短暂经历:
在开始流式上下文之前,应该为计算加载必要的数据:

  • 如果您在DStream操作中加载,则此操作将在每个Batch Inteverval时间重复。
  • 如果您每次都从Hive加载,您应该认真考虑数据传输过程中的间接成本和可能出现的问题。

所以,如果你的数据已经计算好了,那么"小"足够的,在广播变量中加载它在程序的开头,或者甚至更好地在最终变量中加载它。要么是这个,要么在 DStream之前创建一个RDD 并保留它作为引用(看起来就像你现在正在做的那样),尽管记得要缓存它(总是如果你有足够的空间)。

如果你确实需要在流媒体时间阅读它(也许你从流中收到了你的查询密钥),那么尝试在foreachPartition中执行一次并将其保存在本地变量中。