我知道通常的例程:sc.broadcast(x)
。
但是,目前Spark Streaming不支持带检查点的广播变量。
官方指南提供了一个解决方案:http://spark.apache.org/docs/latest/streaming-programming-guide.html#accumulators-and-broadcast-variables。但是,此解决方案只能用于foreachRDD功能。
现在我想使用需要在映射函数(例如KafkaProducer
)中以这种方式广播的大型或不可序列化的变量(如flatMapToPair
),但由于没有可见的RDD变量,我无法检索Spark上下文来广播延迟评估的变量。如果我使用初始上下文创建DStreams或从DStreams检索的上下文,则该任务变得不可序列化。
那么如何在映射函数中使用广播变量呢?或者在映射函数中是否有使用大型或不可序列化变量的解决方法?
答案 0 :(得分:0)
我终于找到了解决方案。要使用这些功能,请使用变换功能而不是地图功能。在转换函数中,我们手动处理RDD并在它们上应用map函数,因此我们可以获得RDD的引用,从而从中获取Spark上下文。