bot*_*kop 4 streaming apache-spark
我有火花流设置,以便它从套接字读取,在将数据发布到兔子队列之前对数据进行一些丰富.在通过在设置流上下文之前读取常规文本文件(Source.fromFile ...)来实例化的Map中,富集查找信息.
我有一种感觉,这不是应该做的事情.另一方面,当使用StreamingContext时,我只能读取流,而不能读取静态文件,因为我可以使用SparkContext.
我可以尝试允许多个上下文,但我不确定这是否也是正确的方法.
任何建议将不胜感激.
假设用于丰富的地图在内存中保存得相当小,在Spark作业中使用该数据的推荐方法是通过广播变量.此变量的内容将一次发送给每个执行程序,从而避免了序列化在闭包中捕获的数据集的开销.
广播变量是在驱动程序中实例化的包装器,并且使用broadcastVar.value闭包中的方法"解包"数据.
这将是如何将广播变量与DStream一起使用的示例:
// could replace with Source.from File as well. This is just more practical
val data = sc.textFile("loopup.txt").map(toKeyValue).collectAsMap()
// declare the broadcast variable
val bcastData = sc.broadcast(data)
... initialize streams ...
socketDStream.map{ elem =>
// doing every step here explicitly for illustrative purposes. Usually, one would typically just chain these calls
// get the map within the broadcast wrapper
val lookupMap = bcastData.value
// use the map to lookup some data
val lookupValue = lookupMap.getOrElse(elem, "not found")
// create the desired result
(elem, lookupValue)
}
socketDStream.saveTo...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |