Apache spark 仅为转换使用Spark ML管道
我正在从事一个项目,其中可配置管道和Spark数据帧更改的沿袭跟踪都是必不可少的。该管道的端点通常只是修改的数据帧(将其视为ETL任务)。对我来说最有意义的是利用已经存在的Spark ML管道API来跟踪这些更改。特别是,更改(根据其他更改添加列等)作为自定义Spark ML转换器实现 然而,我们现在正在进行内部辩论,讨论这是否是实现此管道的最惯用方法。另一种选择是将这些转换实现为一系列UDF,并基于数据帧的模式历史(或Spark的内部DF沿袭跟踪)构建我们自己的沿袭跟踪。这方面的理由是Spark的ML管道不仅仅用于ETL作业,而且应该始终以生成一个可以提供给Spark ML计算器的列为目标来实现。反对这方面的理由是,它需要大量的工作来反映现有的功能Apache spark 仅为转换使用Spark ML管道,apache-spark,apache-spark-mllib,apache-spark-ml,Apache Spark,Apache Spark Mllib,Apache Spark Ml,我正在从事一个项目,其中可配置管道和Spark数据帧更改的沿袭跟踪都是必不可少的。该管道的端点通常只是修改的数据帧(将其视为ETL任务)。对我来说最有意义的是利用已经存在的Spark ML管道API来跟踪这些更改。特别是,更改(根据其他更改添加列等)作为自定义Spark ML转换器实现 然而,我们现在正在进行内部辩论,讨论这是否是实现此管道的最惯用方法。另一种选择是将这些转换实现为一系列UDF,并基于数据帧的模式历史(或Spark的内部DF沿袭跟踪)构建我们自己的沿袭跟踪。这方面的理由是Spar
严格利用Spark的ML管道执行ETL任务是否存在任何问题?仅使用转换器而不包含求值器的任务对我来说似乎是个好主意,特别是如果您可以将生成的不同管道组合成新管道,因为管道本身可以由不同管道组成,因为管道从树上的PipelineStage延伸(源:) 但请记住,您可能会在引擎盖下做与此处所述相同的事情(): 在内部,transform方法使用Spark SQL的udf定义一个函数(基于上述CreateTransfunc函数),该函数将创建新的输出列(具有适当的outputDataType)。UDF随后应用于输入DataFrame的输入列,结果成为输出列(使用DataFrame.withColumn方法) 如果您决定采用其他方法或找到更好的方法,请发表评论。很高兴分享有关Spark的知识