【问题标题】:Parallel training independent model in SparkML (Scala)SparkML (Scala) 中的并行训练独立模型
【发布时间】:2021-04-09 21:23:40
【问题描述】:

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

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

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

话虽如此,有没有办法并行拟合/转换 3 个独立模型?我想到的第一件事是创建一个创建管道的函数/对象,然后运行一个 map 或 parmap,我将在 map 函数中运行 3 个模型,但我不知道这是否会利用并行度。

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

  1. 准备我的数据框
  2. 数据框将有 10 列 0-1 列
  3. 我将运行总共 10 个模型,其中每个模型将采用 10 列之一,如果该列 val == 1 则过滤数据,然后进行拟合/转换。

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

谢谢!

【问题讨论】:

    标签: scala apache-spark apache-spark-mllib apache-spark-ml


    【解决方案1】:

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

    【讨论】:

    • 知道了。是的,我在管道中的每个模型都使用不同的数据列而不是参数,所以我不知道我是否可以利用调整并行性......一个选择可能是构建一个参数网格构建器和一个自定义估计器,这样每个网格参数对应于我的数据框中的不同列(从而代表各个模型),但听起来......实现起来并不有趣:(
    猜你喜欢
    • 2020-10-17
    • 2021-12-30
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2021-03-30
    • 2022-09-18
    • 2020-12-15
    • 2017-08-19
    相关资源
    最近更新 更多