首页 > 解决方案 > 应用 pandas udf 后无法使用 .toPandas() 或 .collect():IndexError

问题描述

我正在使用 pandasUDF 将标准 ML python 库应用于 pyspark DataFrame。在定义架构并做出预测后,我得到了 pyspark DF 作为输出。现在,我想用这个预测数据框做一些事情,例如,我尝试总结“weekly_forecast_1”列中的所有值。当我应用 .collect() 或 .toPandas() 方法时,在 .fit() 中出现以下错误

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

每当我尝试将 .collect() 或 .toPandas() 方法应用于整个 DataFrame 或其某些列时,都会出现上述错误。我试图制作 DF 的副本并应用这些方法,但它会导致相同的错误。

PS 对于不同的 ML 库,错误是相同的(例如 statsmodels.ExponentialSmoothing、fbprophet、sklearn RandomForestRegressor 等)

标签: pythonpandaspysparkuser-defined-functions

解决方案


错误

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

意味着您正在尝试为其维度索引具有太多索引的数组。在这里,您的数组似乎是 0 维的(意味着它是一个标量)并且您尝试对其进行索引。

由于多个不同库的错误相同,我认为您的问题来自 UDF,我猜它没有返回您期望的内容。它可能只返回 DF 内的标量,而不是常规矩阵。


推荐阅读