Spark streaming 获取预计算的特征
Spark streaming get pre computed features
我正在尝试使用 spark streaming 来处理一些 order
流,我有一些先前计算的特征可能是流中 order
的 buyer_id
。
我需要在 Spark Streaming 运行 时获得这些功能。
现在,我将 buyer_id
特征存储在配置单元 table 中并将其加载到 RDD
和
val buyerfeatures = loadBuyerFeatures()
orderstream.transform(rdd => rdd.leftOuterJoin(buyerfeatures))
获取预先计算的功能。
另一种处理方法可能是将特征保存到 hbase
table 中。并在每个 buyer_id
.
开火
哪个更好?或者我可以用另一种方式解决这个问题。
根据我的短暂经验:
加载计算所需的数据应该在启动流上下文之前完成:
- 如果您在 DStream 操作中加载,该操作将在每个 Batch Inteverval 时间重复。
- 如果每次都从Hive加载,应该认真考虑开销成本和数据传输过程中可能出现的问题。
因此,如果您的数据已经计算完毕并且 "small" 足够,请在程序开始时将其加载到广播变量中,或者更好的是,加载到最终变量中。要么这样,要么在 DStream 之前创建一个 RDD 并将其保留为参考(这看起来像你现在正在做的),尽管记得缓存它(总是如果你有足够的 space).
如果您确实需要在流传输时读取它(也许您从流中收到查询密钥),请尝试在 foreachPartition
中执行一次并将其保存在局部变量中。
我正在尝试使用 spark streaming 来处理一些 order
流,我有一些先前计算的特征可能是流中 order
的 buyer_id
。
我需要在 Spark Streaming 运行 时获得这些功能。
现在,我将 buyer_id
特征存储在配置单元 table 中并将其加载到 RDD
和
val buyerfeatures = loadBuyerFeatures()
orderstream.transform(rdd => rdd.leftOuterJoin(buyerfeatures))
获取预先计算的功能。
另一种处理方法可能是将特征保存到 hbase
table 中。并在每个 buyer_id
.
哪个更好?或者我可以用另一种方式解决这个问题。
根据我的短暂经验:
加载计算所需的数据应该在启动流上下文之前完成:
- 如果您在 DStream 操作中加载,该操作将在每个 Batch Inteverval 时间重复。
- 如果每次都从Hive加载,应该认真考虑开销成本和数据传输过程中可能出现的问题。
因此,如果您的数据已经计算完毕并且 "small" 足够,请在程序开始时将其加载到广播变量中,或者更好的是,加载到最终变量中。要么这样,要么在 DStream 之前创建一个 RDD 并将其保留为参考(这看起来像你现在正在做的),尽管记得缓存它(总是如果你有足够的 space).
如果您确实需要在流传输时读取它(也许您从流中收到查询密钥),请尝试在 foreachPartition
中执行一次并将其保存在局部变量中。