Я определил конвейерный трансформатор следующим образом:
class MyTransformer(condition: Column) extends SparkTransformer {
override def transform(dataset: Dataset[_]): DataFrame = {...}
}
, который затем используется в конвейере:
val pipeline = new Pipeline()
pipeline.setStages(Array(new MyTransformer(col("test).equals(lit("value"))))
pipeline.fit(df).transform(mydf)
В моем преобразователе я хочу применить преобразование только к строкамкоторые проверяют условие.
Это приводит к проблеме сериализации:
Serialization stack:
- object not serializable (class: org.apache.spark.sql.Column, value: (test = value))
- field (class: my.project.MyTransformer, name: condition, type: class org.apache.spark.sql.Column)
- ...
В моем понимании, Transformer сериализуется для отправки исполнителям, поэтому каждый параметр должен быть сериализуемым.
Как я могу обойти это? Есть ли обходной путь?
Thx.