2016-07-15 45 views
0

我知道通常的例程:sc.broadcast(x)如何在Spark Streaming映射函数中广播变量?

但是,目前Spark Streaming不支持带检查点的广播变量。

官方指南提供了一个解决方案:http://spark.apache.org/docs/latest/streaming-programming-guide.html#accumulators-and-broadcast-variables。但是,此解决方案只能用于foreachRDD函数。

现在我想使用需要以这种方式映射函数(如flatMapToPair)播出大或不可序列化的变量(如KafkaProducer),但由于没有明显的RDD变量,我不能检索星火上下文广播懒惰评估变量。如果我使用初始上下文创建DStreams或从DStreams获取的上下文,那么该任务将不可序列化。

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

回答

0

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

相关问题