我将ML管道与各种基于UDF的定制转换器一起使用。我正在寻找一种对这个管道进行序列化/反序列化的方法。

我使用以下方法对PipelineModel进行序列化

ObjectOutputStream.write()

但是,每当我尝试反序列化管道时,我都会遇到:
java.lang.ClassNotFoundException: org.sparkexample.DateTransformer

DateTransformer在哪里是我的自定义转换器。是否有实现适当序列化的方法/接口(interface)?

我发现那里
MLWritable

我的类(class)可能实现的接口(interface)(DateTransformer扩展了Transfrormer),但是找不到有用的示例。

最佳答案

如果您使用的是Spark 2.x +,请使用DefaultParamsWritable扩展您的转换器

例如

class ProbabilityMaxer extends Transformer with DefaultParamsWritable{

然后创建一个带有字符串参数的构造函数
 def this(_uid: String) {
    this()
  }

最后,为了成功阅读,请添加一个伴随类
object ProbabilityMaxer extends  DefaultParamsReadable[ProbabilityMaxer]

我已经在我的生产服务器上工作了。上载时,我将在项目中添加gitlab链接

关于serialization - 有什么方法可以序列化Spark ML Pipeline中的自定义Transformer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40284214/

10-10 15:12