使用MLflow Spark UDF调用TensorFlow MNIST模型时报错,求解析
错误含义解析:MNIST模型Spark预测报错
这个错误的核心是Spark ML的Vectors.dense生成的向量类型无法被MLflow加载的TensorFlow模型识别。
具体拆解:
- 你的TensorFlow模型定义时输入形状是
(28, 28, 1),但你将x_testreshape为一维数组后,用Vectors.dense包装成了Spark的DenseVector类型。在Spark内部,这个类型是以一个包含type、size、indices、values的结构体(struct)存在的。 - MLflow的
spark_udf无法将这种Spark特有的结构体数据转换成TensorFlow模型能处理的张量格式,因此抛出了「不支持该数据类型」的错误。
简单修正思路
不要使用Spark的Vectors类型包装数据,直接传递原始数值数组:
arr = map(lambda x: (x.tolist(), ), x_test.reshape(num_rows, -1)) df = spark.createDataFrame(arr, ["features"]) # 调用UDF时直接传入列,无需用struct包裹 output = df.withColumn('predictions', loaded_model(col("features")))
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

