我知道通常的惯例: sc.broadcast(x)
.
但是,目前spark流不支持带有检查点的广播变量。
官方指南提供了一个解决方案:http://spark.apache.org/docs/latest/streaming-programming-guide.html#accumulators-和广播变量。但是,此解决方案只能用于foreachrdd函数。
现在我想使用大的或者不可变量(比如 KafkaProducer
)在Map函数(如 flatMapToPair
),但由于没有可见的rdd变量,因此我无法检索spark上下文来广播lazy求值变量。如果使用初始上下文创建数据流或从数据流检索的上下文,则任务将无法序列化。
那么如何在Map函数中使用广播变量呢?或者在Map函数中使用大的或不可变量有什么解决方法吗?
1条答案
按热度按时间gblwokeq1#
我终于找到了解决办法。要使用这些功能,请使用变换函数而不是贴图函数。在转换函数中,我们手动处理rdd并对其应用map函数,这样就可以得到rdd的引用,从而从中得到spark上下文。