【问题标题】:Scala to Java 8 MLeap TranslationScala 到 Java 8 MLeap 的翻译
【发布时间】:2017-11-10 18:48:06
【问题描述】:

我想使用MLeap 部署 Spark ML 机器学习模型并使用它们进行实时预测。

创建者发布了 Scala 教程,但我需要支持 Java 8 代码库。

我将如何在 Java 8 中实现以下代码:

val pipeline = SparkUtil.createPipelineModel(uid = "pipeline", Array(featureModel, rfModel))

val sbc = SparkBundleContext()
for(bf <- managed(BundleFile("jar:file:/tmp/mnist.model.rf.zip"))) {
        pipeline.writeBundle.save(bf)(sbc).get
      }

val bundle = (for(bundleFile <- managed(BundleFile("jar:file:/tmp/simple-spark-pipeline.zip"))) yield {
  bundleFile.loadMleapBundle().get
}).opt.get

【问题讨论】:

    标签: apache-spark machine-learning real-time apache-spark-mllib mleap


    【解决方案1】:

    如果您只使用普通的 Spark ML 转换器,您可以使用 SimpleSparkSerializer 轻松保存和加载您的模型。

    保存:

    new SimpleSparkSerializer().serializeToBundle(model, "jar:file:/tmp/model.zip", trainData);
    

    加载中:

    Transformer model = new SimpleSparkSerializer().deserializeFromBundle("jar:file:/tmp/model.zip");
    

    【讨论】:

    • 如果我有自定义 Estimators/Transformers 怎么办?
    【解决方案2】:

    您可以跳过加载 Spark,它是庞大的类,直接通过运行时加载。

    private static Transformer kMeansModel;
    private static MleapContext mleapContext;
    private static BundleBuilder bundleBuilder;
    
    public MLeapLocalService() throws IOException {
        mleapContext = new ContextBuilder().createMleapContext();
        bundleBuilder = new BundleBuilder();
        Resource res = resourceLoader.getResource("classpath:aihello.com/aimodels/kmeans-model.zip");
        kMeansModel = bundleBuilder.load(res.getFile(), mleapContext).root();
    }
    

    然后您可以通过以下方式进行预测:

        LeapFrameBuilder builder = new LeapFrameBuilder();
        List<StructField> fields = new ArrayList<StructField>();
        fields.add(builder.createField("docs", builder.createString()));
        StructType schema = builder.createSchema(fields);
        List<Row> rows = new ArrayList<Row>();
        rows.add(builder.createRow(docs));
        DefaultLeapFrame frame = builder.createFrame(schema, rows);
        DefaultLeapFrame returnFrame = kMeansModel.transform(frame).get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多