python - 应用 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 等)
解决方案
错误
IndexError: too many indices for array:array is 0-dimensional, but 1 were indexed
意味着您正在尝试为其维度索引具有太多索引的数组。在这里,您的数组似乎是 0 维的(意味着它是一个标量)并且您尝试对其进行索引。
由于多个不同库的错误相同,我认为您的问题来自 UDF,我猜它没有返回您期望的内容。它可能只返回 DF 内的标量,而不是常规矩阵。