我有一个大小约为400MB的weka模型存储在S3中。现在,我有一些记录需要运行该模型并进行预测。
为了进行预测,我尝试了以下操作:
下载和加载模型到driver作为静态对象,并将其广播到所有执行器上。对预测RDD执行map操作。 ----> 不起作用,因为在Weka中,为了进行预测,需要修改模型对象,而广播需要一个只读副本。
下载和加载模型到driver作为静态对象,并在每个map操作中将其发送到执行器。 -----> 可行(不高效,因为在每个map操作中都要传递400MB的对象)
在driver上下载模型并在每个执行器上加载并缓存它。(不知道怎么做)
有没有人知道如何加载模型到每个执行器,并缓存它,以便对于其他记录,我无需再次加载它?
ExecutorPlugin
的Java接口,允许自定义init()
和shutdown()
函数。详情请见:https://issues.apache.org/jira/browse/SPARK-24918 - Samson Scharfrichter