在 Apache Spark 和 Elephas 中使用 Keras 模型作为广播变量

uda*_*dai 3 broadcast apache-spark keras

我有一个预训练权重 [h5df] 约 700mb 的 keras 模型。我想将它与 Apache Spark 一起用作广播变量。1. 这似乎是不可能的,因为 keras 模型本身不是火花感知的,也不是可序列化的。2. 用谷歌搜索一下,我发现 Elephas 库可以完成这项工作。所以尝试在 ElephasTransformer 中包装 Keras 预训练模型。这引发了多个错误(我使用 python 2.7)。例如在 Elephas 的文件 ml_model.py 中,“from pyspark.ml.util import keyword_only”,导入不可用。即使我尝试将其注释掉并在代码中进行适当的修改时,它似乎也无法处理 keras 模型的广播,因为它会在其中一个密集层中引发张量错误。

如何在 apache spark 中使用预训练的 keras 模型作为广播变量?

hi-*_*zir 6

我会使用分发模型 SparkFiles

spark.sparkContext.addFile("model_file.h5")
Run Code Online (Sandbox Code Playgroud)

并在本地加载:

from pyspark import SparkFiles
from keras.models import load_model

def f(it):
    path = SparkFiles.get("mode_file.h5")
    model =  load.model(path)

    for i in it:
        yield ... # Do something


rdd.mapPartitions(f)
Run Code Online (Sandbox Code Playgroud)