【发布时间】: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