【发布时间】:2021-10-02 05:57:40
【问题描述】:
我的 PySpark 数据集包含分类数据。
为了根据这些数据训练模型,我关注了example notebook。特别是,请参阅编码部分的预处理数据部分。
我现在需要在其他地方使用这个模型;因此,我遵循 Databricks 的建议来保存和加载此模型。
Pandas 可以正常工作(参见下面的代码)。
logged_model = 'runs:/e905f5759d434a1391bbe1e54a2b/best-model'
# Load model as a PyFuncModel.
loaded_model = mlflow.pyfunc.load_model(logged_model)
# Predict on a Pandas DataFrame.
import pandas as pd
loaded_model.predict(pd.DataFrame(data))
但是数据框太大,无法转换为 Pandas。因此我需要让它在 Spark 中工作:
import mlflow
logged_model = 'runs:/e905f5759d434a131bbe1e54a2b/best-model'
# Load model as a Spark UDF.
loaded_model = mlflow.pyfunc.spark_udf(spark, model_uri=logged_model)
# Predict on a Spark DataFrame.
df.withColumn('predictions', loaded_model(*columns)).collect()
但是这个 sn-p 正在生产:
java.lang.UnsupportedOperationException: Unsupported data type: struct<type:tinyint,size:int,indices:array<int>,values:array<double>>
我的感觉是 udf 不接受这种类型的数据作为输入。 有没有办法解决它? 另一种解决方案?
【问题讨论】:
标签: pyspark databricks mlflow