在Pyspark中构建定制的变压器和管道
Pyspark食谱第1部分
对量身定制模型的需求是数据科学行业仍在蓬勃发展的唯一原因!否则,到目前为止,我们已经被汽车工具所取代。因此,在这篇文章中,我们将对Pyspark Transformers进行深入研究。
什么是火花中的变压器?
变压器是一种抽象算法(即类),可以将一个数据框转换为另一个数据框
- Minmaxscaler,OneHotenCoder等是变压器的所有示例(它们在列/列列表上运行以生成一个或多个列)。请参阅文档以获取变压器的完整列表: -https://spark.apache.org/docs/1.6.0/ml-features.html
以下是Pyspark中的一个示例: -
一个人可以从第6行那多变的Scaleer是类MinMaxScaler的一个实例& 拥有实例变量:outputcol&inputcol以及关注类方法:fit()&transform()((https://spark.apache.org/docs/latest/api/python/reference/pai/pyspark.ml.feature.minmaxscaler.html)
从这里我们可以得出结论要构建自定义变压器,我们需要自己的自定义类
在旁注: -fit()/transform()常见设计模式跨多个ML框架,例如Scikit-Learn,Pyspark,TensorFlow等
自定义Pyspark变压器
客观的:构建一个自定义变压器列列表和阈值作为输入。然后删除给定的列列表和任何null_%>给定阈值的列并返回新的数据框
这就是解决方案就是荣耀!
让我们剖析此解决方案: -
- 要创建自定义变压器,我们需要继承抽象Pyspark变形金刚类(第3行和第8行)
- 我们将要删除的列的输入列表和阈值作为实例变量。这极好的( )第8行上的方法告诉Python解释器允许儿童课Mycolumndropper访问所有方法和属性基类变压器
- 现在自定义变形金刚暗示自定义“逻辑”,因此我们覆盖从基类变压器继承的_transform方法
- 第13行删除指定的列列表和第14-19行删除所有具有null_%>输入阈值的列并返回dataframe
如何使用自定义变压器?嵌入火花管道?链变压器?
您可以通过两种方法使用上述变压器(请参见下面的完整示例): -
- 作为独立转换(第27-28行): - 在这里,我们只是实例化我们的自定义变压器类并调用转换。变压器将列“ Y”,“ A”和“ Z”放下:’y’和“ a”根据drop_list被删除,“ z”的null_%= 1/4 = 25> 20
- 作为火花管道中的舞台(第31-32行): - 在这里,我们首先实例化变量data_pipeline是一个默认火花类管道的实例→然后将我们的自定义变压器添加为阶段→在完整的管道
- 使用火花管道约定更有用,因为它使我们能够链多变压器(第35-37行)并允许序列化/腌制
在随后的帖子中,我将覆盖序列化的自定义火花变压器和处理嵌套柱字段