SparkML (Scala) 中的并行训练独立模型

Parallel training independent model in SparkML (Scala)

假设我有 3 个简单的 SparkML 模型,它们将使用相同的 DataFrame 作为输入,但彼此完全独立(在 运行正在使用的数据序列和列中)。

我想到的第一件事是,只需创建一个包含阶段数组中的 3 个模型的管道数组,然后 运行 整合总体 fit/transform 以获得完整的预测等.

但是,我的理解是,因为我们将这些模型作为一个序列堆叠在单个管道中,Spark 不一定会 运行 这些模型并行,即使它们彼此完全独立。

话虽这么说,有没有办法并行fit/transform 3 个独立模型?我想到的第一件事是创建一个 function/object 来创建一个管道,然后 运行 一个 map 或 parmap 我将 运行 map 函数中的 3 个模型,但是我不知道这是否会利用并行性。

这些也不是真正的交叉验证类型模型;我想要的工作流程是:

  1. 准备我的数据框
  2. 数据框假设有 10 列 0-1
  3. 我将 运行 一共 10 个模型,其中每个模型将取 10 列中的一列,如果该列 val == 1,则过滤数据,然后 fit/transform。

因此,独立性来自于这些单独的模型没有链接并且可以 运行 原样。

谢谢!

SparkML 支持对同一管道进行并行计算https://spark.apache.org/docs/2.3.0/ml-tuning.html。但是对于不同的模型,我还没有看到任何实现。如果您使用并行集合来包装您的管道,它适合的第一个模型将获取您的 Spark 应用程序的资源。也许使用 RDD api 你可以做一些事情,但是使用 Spark ML ......并行训练不同的管道并产生不同的并行阶段,每个阶段都使用不同的管道模型,目前这是不可能的。