我有一些RDD[String]
,我需要对此RDD执行一些过滤。我也有
public class MyCustomClassLoader extends ClassLoader { }
所以它看起来如下:
val rdd: RDD[String] = //...
rdd.filter(str => {
//Here I need to set Thread.currentThread().setContextClassLoader()
//to MyCustomClassLoader
})
是否可以这样做并避免在每个Thread.currentThread().setContextClassLoader(myCustomClassLoader)
记录上呼叫RDD
。在我的情况下,这太贵了。
我知道Spark的CoarseGrainedExecutorBackend
使用ChildFirstURLClassLoader
或MutableURLClassLoader
。
有没有办法覆盖它?
UPD :出于某些性能原因,我使用Class
动态生成ASM
。所以在驱动程序方面,我有一堆Class
个对象,它们代表Function[String, AnyRef]
的子类。我需要在执行程序上交付它们并正确加载。