PySpark筛选特定行范围报错求助:TypeError问题排查
解决PySpark添加行号筛选时报错
TypeError: 'int' object is not callable的问题 报错原因
核心问题是代码中使用的PySpark函数名(如row_number、lit或col)被错误当作变量赋值成了整数,导致调用函数时实际是调用一个整数,触发"int不可调用"的错误;另外你的代码缺少必要的函数导入语句,也会加剧这个问题。
修正步骤
补充导入必需的PySpark函数
你的代码仅导入了Window,但row_number、lit、col这些核心函数未导入,必须补充:from pyspark.sql.window import Window from pyspark.sql.functions import row_number, lit, col排查变量命名冲突
检查之前的代码,确保没有将row_number、lit、col这类函数名用作变量名(比如写过row_number = 10、col = 5这类代码),如果有,修改这些变量的名称。使用修正后的完整代码
# 导入依赖 from pyspark.sql.window import Window from pyspark.sql.functions import row_number, lit, col # 定义窗口(将整个DataFrame作为单个分区,按固定值排序保证顺序稳定) w = Window().partitionBy(lit('a')).orderBy(lit('a')) # 添加行号列 df1 = my_dataframe.withColumn("row_num", row_number().over(w)) # 筛选行号范围 display(df1.filter(col("row_num").between(1,40)))
额外简化方案
如果你的需求只是获取DataFrame的前40行,可直接使用limit方法,代码更简洁:
display(my_dataframe.limit(40))
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

