Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 仅为转换使用Spark ML管道_Apache Spark_Apache Spark Mllib_Apache Spark Ml - Fatal编程技术网

Apache spark 仅为转换使用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数据帧更改的沿袭跟踪都是必不可少的。该管道的端点通常只是修改的数据帧(将其视为ETL任务)。对我来说最有意义的是利用已经存在的Spark ML管道API来跟踪这些更改。特别是,更改(根据其他更改添加列等)作为自定义Spark ML转换器实现

然而,我们现在正在进行内部辩论,讨论这是否是实现此管道的最惯用方法。另一种选择是将这些转换实现为一系列UDF,并基于数据帧的模式历史(或Spark的内部DF沿袭跟踪)构建我们自己的沿袭跟踪。这方面的理由是Spark的ML管道不仅仅用于ETL作业,而且应该始终以生成一个可以提供给Spark ML计算器的列为目标来实现。反对这方面的理由是,它需要大量的工作来反映现有的功能


严格利用Spark的ML管道执行ETL任务是否存在任何问题?仅使用转换器而不包含求值器的任务对我来说似乎是个好主意,特别是如果您可以将生成的不同管道组合成新管道,因为管道本身可以由不同管道组成,因为管道从树上的PipelineStage延伸(源:)

但请记住,您可能会在引擎盖下做与此处所述相同的事情():

在内部,transform方法使用Spark SQL的udf定义一个函数(基于上述CreateTransfunc函数),该函数将创建新的输出列(具有适当的outputDataType)。UDF随后应用于输入DataFrame的输入列,结果成为输出列(使用DataFrame.withColumn方法)

如果您决定采用其他方法或找到更好的方法,请发表评论。很高兴分享有关Spark的知识