You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark代码报错NameError: name 'over' is not defined的解决方法咨询

问题解决:NameError: name 'over' is not defined

错误原因及修复步骤:

  1. 窗口函数调用语法错误
    原代码把over()作为独立参数传递是错误的,over()是PySpark窗口函数(row_number()/rank()/dense_rank())的链式方法,必须紧跟在函数后面,不能用逗号分隔。

  2. 列名拼写错误
    过滤条件里的Desnse_Rank拼写错误,正确列名是Dense_Rank(少了一个字母'e')。

  3. 确保必要导入
    运行代码前必须导入所需的函数和窗口类,同时正确定义窗口规则。

修正后的完整代码示例:

# 先导入必要的模块和函数
from pyspark.sql.functions import row_number, rank, dense_rank, col
from pyspark.sql.window import Window

# 定义窗口规则(示例:按department分区,按salary降序排序)
window = Window.partitionBy("department").orderBy(col("salary").desc())

# 修正后的核心代码
emp_data_df.withColumn("Row_Number", row_number().over(window))\
           .withColumn("Rank", rank().over(window))\
           .withColumn("Dense_Rank", dense_rank().over(window))\
           .filter(col("Dense_Rank") <= 2)\
           .show(truncate=False)

关键说明:

  • over(window)必须直接跟在窗口函数之后,比如row_number().over(window),这样PySpark才能识别这是窗口函数的调用逻辑,不会把over当作未定义的独立变量。
  • 列名必须和withColumn定义的完全一致,拼写错误会导致找不到列或者出现其他逻辑错误。

内容的提问来源于stack exchange,提问作者Swapnil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:38:11