Не могу использовать .toPandas() или .collect() после применения pandas udf: IndexError

#python #pandas #pyspark #user-defined-functions

#питон #панды #пайспарк #определяемые пользователем функции

Вопрос:

Я использую pandasUDF для применения стандартных библиотек ML python к фрейму данных pyspark. После определения схемы и составления прогнозов я получаю pyspark DF в качестве выходных данных. Теперь я хочу кое-что сделать с этим фреймом данных прогнозов, например, я пытаюсь суммировать все значения в столбце «weekly_forecast_1». Когда я применяю .collect() или .Методы toPandas(), я получаю следующую ошибку в .fit()

 IndexError: too many indices for array:array is 0-dimensional, but 1 were indexed
 

Я получаю вышеуказанную ошибку всякий раз, когда пытаюсь применить .collect() или .Методы toPandas() для всего фрейма данных или для некоторых его столбцов. Я попытался сделать копию DF и применить методы, но это приводит к той же ошибке.

PS ошибка одинакова для разных библиотек ML (например, statsmodels.Экспоненциальное сглаживание, fbprophet, sklearn RandomForestRegressor и т. Д.)

Комментарии:

1. Добро пожаловать в StackOverflow. Чтобы улучшить ваш вопрос, пожалуйста, добавьте (возможно, упрощенный) фрагмент кода, чтобы мы могли видеть, что вы делаете. В противном случае вам трудно чем-либо помочь.

Ответ №1:

Ошибка

 IndexError: too many indices for array:array is 0-dimensional, but 1 were indexed
 

означает, что вы пытаетесь проиндексировать массив со слишком большим количеством индексов для его размеров. Здесь кажется, что ваш массив является 0-мерным (что означает, что он скалярный), и вы пытаетесь его проиндексировать.

Поскольку ошибка одинакова для нескольких разных библиотек, я думаю, что ваша проблема связана с UDF, и я бы предположил, что она не возвращает то, что вы ожидаете. Вероятно, он возвращает только скаляр внутри DF вместо обычной матрицы.