将 Spark ML 管道保存到数据库

Saving Spark ML pipeline to a database

是否可以将 Spark ML 管道保存到数据库(例如 Cassandra)?从文档中我只能看到保存到路径选项:

myMLWritable.save(toPath);

有没有办法以某种方式包装或更改 myMLWritable.write() MLWriter 实例并将输出重定向到数据库?

目前不可能(或至少不支持)。 ML writer 不是 extendable 并且取决于 Parquet 文件和目录结构来表示 models.

从技术上讲,您可以提取单个组件并使用内部私有 API 从头开始​​重新创建 models,但这可能是唯一的选择。

Spark 2.0.0+

乍一看,所有 TransformersEstimators 都实现了 MLWritable。如果您使用 Spark <= 1.6.0 并在模型保存方面遇到一些问题,我建议您切换版本。

Spark >= 1.6

从 Spark 1.6 开始,可以使用 save 方法保存模型。因为几乎每个模型都实现了 MLWritable interface. For example LogisticRegressionModel,所以有它,因此可以使用它来将模型保存到所需的路径。

Spark < 1.6

可以优化 DataFrames 上的一些操作,与普通 RDDs 相比,它转化为改进的性能。 DataFrames提供高效的缓存和 SQLish API 可以说比 RDD API.

更容易理解

ML Pipelinesare extremely useful and tools like cross-validator or differentevaluators 是任何机器管道中必不可少的,即使上述 none 特别难以在低级别 MLlib API 之上实现它拥有现成可用、通用且经过相对良好测试的解决方案要好得多。

我相信最终通过使用 ML 而不是 MLLib 得到的结果是相当优雅的,高水平的 API。您可以做的一件事是将两者结合起来创建一个自定义的多步骤管道:

  • 使用 ML 加载、清理和转换数据,
  • 提取所需数据(参见示例 [extractLabeledPoints ]4方法)并传递给 MLLib 算法,
  • 添加自定义交叉验证/评估
  • 使用您选择的方法(Spark 模型或 PMML)保存 MLLib 模型

Jira中也提供了临时解决方案。 Temporary Solution