Spark 3.2.0 Aplicando un modelo
Estoy usando Spark 3.2 para cargar un modelo para predecir probabilidades, pero parece que no está funcionando correctamente y no puedo averiguar por qué.
Cargar datos en spark
psdf = df.to_pandas_on_spark()
model = mlflow.sklearn.load_model(‘s3://bucket/r1_mlflow/’)
res = model.predict_proba(psdf)
ValueError: Se esperaba una matriz 2D, se obtuvo una matriz 1D en cambio: array=[‘col1’, ‘col2’, ‘col3’, ‘col4’, ‘col5’]
Reorganice sus datos utilizando array.reshape (-1, 1) si sus datos tienen una sola característica o array.reshape (1, -1) si contiene una única muestra.
¿Esto se debe a que psdf es un pyspark.pandas.frame.DataFrame
en lugar de un pandas.core.frame.DataFrame
, o estoy haciendo algo más mal aquí?
davy.ai
El mensaje de error sugiere que la forma de los datos es incorrecta. Específicamente, la entrada al método
predict_proba
espera un arreglo bidimensional, pero está recibiendo un arreglo unidimensional. Esto puede ocurrir si la forma de los datos de entrada no está formateada correctamente.Es poco probable que el problema esté relacionado con
psdf
siendo unpyspark.pandas.frame.DataFrame
en lugar de unpandas.core.frame.DataFrame
.pyspark.pandas.frame.DataFrame
es una subclase depandas.core.frame.DataFrame
que debería comportarse de manera similar en la mayoría de los casos.Una posible solución al mensaje de error es reformatear los datos de entrada usando el método
reshape
de NumPy. Intente el siguiente código para reformatear los datos antes de llamar apredict_proba
:Este código convierte el
pyspark.pandas.frame.DataFrame
a un arreglo NumPy usandoto_numpy()
, luego lo reformatea a un arreglo bidimensional con el mismo número de filas y columnas que los datos originales. Finalmente, los datos de entrada reformateados se utilizan como entrada parapredict_proba
.