应用 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的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Databricks 中使用 Pandas UDF

pandas_udf结果无法写入表

在 PySpark 中使用 pandas_udf 时无法填充数组

Pandas UDF 函数中无法识别的函数

将多行结构化流式传输到 pandas udf

为啥我的应用程序不能以 pandas_udf 和 PySpark+Flask 开头?