Geo*_*ler 6 pipeline apache-spark apache-spark-sql apache-spark-ml apache-spark-mllib
我想为 Spark 开发一个自定义估算器,它也可以处理优秀管道 API 的持久性。但是如何在 PySpark mllib 中滚动自定义估计器所说,目前还没有很多文档。
我有一些用 Spark 编写的数据清理代码,想将其包装在自定义估算器中。包括一些na-替换、列删除、过滤和基本特征生成(例如出生日期到年龄)。
ScalaReflection.schemaFor[MyClass].dataType.asInstanceOf[StructType]我仍然不清楚的是:
transform自定义管道模型中的将用于转换新数据上的“拟合”估计器。它是否正确?如果是,我应该如何将拟合值(例如平均年龄)从上面转移到模型中?
如何处理持久性?我在私有 Spark 组件中找到了一些通用loadImpl方法,但不确定如何将我自己的参数(例如平均年龄)传输到用于序列化的MLReader/中。MLWriter
如果您能帮助我使用自定义估算器,那就太好了 - 特别是持久性部分。
首先,我相信你混合了两种不同的东西:
Estimators- 代表可以进行fit-ted 的阶段。Estimator fit方法接受Dataset并返回Transformer(模型)。Transformers- 代表可以transform数据的阶段。当你fit Pipeline一切fits归来。可以按顺序调用模型中的所有数据。EstimatorsPipelineModelPipelineModeltransformtransformTransformers
我应该如何传输拟合值
这个问题没有单一的答案。一般来说,您有两种选择:
Transformer。Params制定的拟合模型的参数Transformer。第一种方法通常由内置方法使用Transformer,但第二种方法应该适用于一些简单的情况。
如何处理持久性
Transformer仅由其定义,Params则可以扩展DefaultParamsReadable。MLWritable并实现MLWriter对您的数据有意义的参数。Spark源码中有多个示例展示了如何实现数据和元数据的读/写。如果您正在寻找一个易于理解的示例,请查看以下位置CountVectorizer(Model):
Estimator并Transformer 分享共同的Params。DefaultParamsWriterDefaultParamsReader