如何在Spark Streaming映射函数中广播变量?

时间:2016-07-15 06:03:24

标签: java apache-kafka spark-streaming

我知道通常的例程: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检索的上下文,则该任务变得不可序列化。

那么如何在映射函数中使用广播变量呢?或者在映射函数中是否有使用大型或不可序列化变量的解决方法?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。要使用这些功能,请使用变换功能而不是地图功能。在转换函数中,我们手动处理RDD并在它们上应用map函数,因此我们可以获得RDD的引用,从而从中获取Spark上下文。