0

通过阅读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))
4

0 回答 0