应用 pandas udf 后无法使用 .toPandas() 或 .collect():IndexError
Posted
技术标签:
【中文标题】应用 pandas udf 后无法使用 .toPandas() 或 .collect():IndexError【英文标题】:Can't use .toPandas() or .collect() after applying pandas udf: IndexError 【发布时间】:2020-11-24 07:05:06 【问题描述】:我正在使用 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 并应用方法,但结果相同。
附:不同 ML 库的错误是相同的(例如 statsmodels.ExponentialSmoothing、fbprophet、sklearn RandomForestRegressor 等)
【问题讨论】:
欢迎来到 ***。为了改进您的问题,请添加一个(可能是简化的)代码 sn-p 以便我们可以看到您在做什么。否则,很难为您提供任何帮助。 【参考方案1】:错误
IndexError: too many indices for array:array is 0-dimensional, but 1 were indexed
表示您正在尝试为其维度索引太多索引的数组。在这里,您的数组似乎是 0 维的(意味着它是一个标量),您尝试对其进行索引。
由于多个不同库的错误相同,我认为您的问题来自 UDF,我猜它没有返回您期望的内容。它可能只返回 DF 内的标量,而不是常规矩阵。
【讨论】:
以上是关于应用 pandas udf 后无法使用 .toPandas() 或 .collect():IndexError的主要内容,如果未能解决你的问题,请参考以下文章