通过阅读mleap 文档,我可以看到Spark MLImputer
在受支持的转换器列表中。
但是,当我尝试在 pyspark 中序列化管道时,我得到了java.util.NoSuchElementException: key not found: org.apache.spark.ml.feature.ImputerModel
.
这是否意味着不支持 Imputer?
我在 mleap repo中找到了一张关于这个问题的票 - 这是否意味着只支持火花的 MLeap 版本Imputer
(来自 的那个mleap-spark-extension
)?如何从 pyspark 使用它?(在这种情况下,文档非常具有误导性,应该在某处提及)。
我的代码无法序列化管道(pyspark 3.0.3,mleap 0.19.0):
from pyspark.ml import Pipeline
from pyspark.ml.feature import Imputer
from pyspark.sql import SparkSession
from mleap.pyspark.spark_support import SimpleSparkSerializer
input = [
{"a": 0, "b": None},
{"a": None, "b": 0},
{"a": 10, "b": None},
{"a": None, "b": 10},
]
spark = SparkSession.builder \
.config('spark.jars.packages', 'ml.combust.mleap:mleap-spark_2.12:0.19.0') \
.config("spark.jars.excludes", "net.sourceforge.f2j:arpack_combined_all") \
.getOrCreate()
df = spark.sparkContext.parallelize(input).toDF()
pip = Pipeline(stages=[
Imputer(strategy="mean", inputCols=["a", "b"], outputCols=["a", "b"])
])
fitted_pip = pip.fit(df)
fitted_pip.serializeToBundle("jar:file:/tmp/test-pip.zip", fitted_pip.transform(df))