Spark专家的一个很好的问题。Spark执行程序上的对象缓存
我正在处理map
操作(RDD)中的数据。在映射函数中,我需要查找A
类的对象以用于处理RDD中的元素。
由于这将在执行器上执行,并且创建类型为A
(将被查找)的元素恰好是一个昂贵的操作,我想要在每个执行器上预加载和缓存这些对象。做这件事的最好方法是什么?
一个想法是广播查找表,但类
A
是不可序列(在其没有实施控制)。另一个想法是将它们加载到单例对象中。但是,我想控制装入该查找表的内容(例如,不同的Spark作业中可能有不同的数据)。
理想情况下,我需要指定哪些将在执行人一次装入(包括流的情况下,使查找表停留在批次之间的内存),通过将可在驾驶过程中的参数它的启动,在任何数据被处理之前。
是否有干净优雅的做法,或者它不可能实现?
为什么没有查找表也分布?所以你可以使用DataFrames来连接两组数据?如果总是需要查找数据,那么每次需要运行计算时都需要承受广播数据的费用? – DevZer0
@ DevZer0 _A不是serializable_。 – 2016-11-05 14:07:25