【问题标题】:Non linear (DAG) ML pipelines in Apache SparkApache Spark 中的非线性 (DAG) ML 管道
【发布时间】:2016-09-29 05:28:35
【问题描述】:

我已经设置了一个简单的 Spark-ML 应用程序,其中我有一个独立的转换器管道,可以将列添加到原始数据的数据框中。由于变压器不查看彼此的输出,我希望我可以在非线性 (DAG) 管道中并行运行它们。我能找到的关于这个功能的只有the Spark ML-Guide的这段话:

可以创建非线性管道,只要数据流 图形成有向无环图(DAG)。该图目前 根据输入和输出列名隐式指定 每个阶段(通常指定为参数)。如果管道形成 一个 DAG,则必须按拓扑顺序指定阶段。

我对该段的理解是,如果我为每个转换器设置 inputCol(s)、outputCol 参数并在创建管道时按拓扑顺序指定阶段,那么引擎将使用该信息来构建执行 DAG s.t.一旦输入准备好,DAG 的各个阶段就可以运行。

关于这个的一些问题:

  • 我的理解正确吗?
  • 如果我没有为其中一个阶段/变压器指定输出列(例如,该阶段仅过滤某些行),会发生什么情况?是否会假设出于 DAG 创建目的,该阶段正在更改所有列,因此所有后续阶段都应该等待它?
  • 同样,如果我没有为其中一个阶段指定 inputCol(s),会发生什么情况?该阶段会等到所有之前的阶段都完成吗?
  • 看来我可以指定多个输入列但只能指定一个输出列。如果转换器将两列添加到数据帧中会发生什么(Spark 本身对此没有问题)?有没有办法让 DAG 创建引擎知道呢?

【问题讨论】:

  • 您是使用 Spark 还是开发其核心?如何指定阶段的顺序?
  • @54l3d 我说的是 ml 管道。当我创建这样一个管道时,有一个 stage 参数,它采用有序阶段(Transformers/Estimators)的列表。

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


【解决方案1】:

我的理解正确吗?

不完全是。因为阶段是按拓扑顺序提供的,所以要以正确的顺序遍历图形,您只需从左到右应用PipelineStages。这正是您致电 PipelineTransform 时发生的情况。

阶段序列被遍历两次:

同样,如果我没有为其中一个阶段指定 inputCol(s),会发生什么情况?

几乎没有什么有趣的。由于阶段是按顺序应用的,并且在实际转换开始之前,给定的Transformer 使用其transformSchema 方法应用唯一的架构验证,因此它将像任何其他阶段一样处理。

如果转换器将两列添加到数据帧会发生什么

同上。只要它为后续阶段生成有效的输入模式,它就与任何其他 Transformer 没有什么不同。

变压器不看彼此的输出我希望我可以并行运行它们

理论上,您可以尝试构建一个自定义复合转换器,它封装了多个不同的转换,但唯一可以独立执行并从此类操作中受益的部分是模型拟合。在一天结束时,您必须返回一个转换后的DataFrame,它可以被下游阶段使用,并且实际转换很可能被安排为单个数据扫描。

问题是否真的值得努力。虽然可以同时执行多个作业,但它仅提供一些优势,如果可用资源量与处理单个作业所需的工作量相比相对较高。它通常需要一些低级管理(分区数、shuffle 分区数),这不是 Spark SQL 的强项。

【讨论】:

  • 谢谢。然后 IIUC Spark 似乎像处理线性管道一样处理非线性管道,并且只是按顺序运行各个阶段。任何猜测从手册那段的重点是什么?似乎图形/链只是由阶段的顺序而不是由 inputCol、outputCol 指定的,对吧?
  • 这是我根据我在代码中看到的内容以及管道在实践中的行为方式的理解。由于转换应用于相同的沿袭,因此您无法扇出,而且据我所知,没有连接原语,因此您无法扇入。所以我什至建议在 ML 中除了逻辑之外没有非线性管道之类的东西编码在单个 PipelineStage 中。不过我可能是错的。也许您可以将其发送至 dev@spark.apache.org,编写此描述和/或管道逻辑的人可以澄清/确认/反驳。
  • 我已经给邮件列表写了一条消息。如果没有新的东西出现,我很快就会接受这个答案。
  • @hillel 感谢您的接受和赏金。你得到什么有用的回应了吗?
  • 谢谢。我已经回复了:apache-spark-developers-list.1001551.n3.nabble.com/…。让我们看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多