【发布时间】:2017-02-22 06:27:51
【问题描述】:
我有一个存储在 S3 中的 weka 模型,大小约为 400MB。 现在,我有一些记录,我想在这些记录上运行模型并执行预测。
对于执行预测,我尝试的是,
将模型作为静态对象下载并加载到驱动程序上,并将其广播给所有执行程序。对预测 RDD 执行映射操作。 ----> 不起作用,因为在 Weka 中执行预测,需要修改模型对象,并且广播需要只读副本。
将模型作为静态对象下载并加载到驱动程序上,并在每个映射操作中将其发送到执行程序。 -----> 工作(效率不高,因为在每个地图操作中,我传递了 400MB 对象)
在驱动程序上下载模型并将其加载到每个执行程序上并缓存在那里。 (不知道该怎么做)
有人知道如何在每个执行器上加载模型一次并缓存它,以便其他记录不再加载它吗?
【问题讨论】:
-
从 Spark 2.4 开始,有一个 Java 接口
ExecutorPlugin允许自定义init()和shutdown()> issues.apache.org/jira/browse/SPARK-24918
标签: scala apache-spark weka partitioning