PySpark计算row_number报错:AttributeError: 'module'无rowNumber属性
问题原因及解决方案
你碰到的AttributeError: 'module' object has no attribute 'rowNumber'错误,核心原因很简单——PySpark里压根没有rowNumber()这个函数,正确的窗口函数名是row_number()(注意是蛇形命名,下划线加小写组合)。
PySpark的内置函数普遍遵循蛇形命名法(snake_case),而不是你写的驼峰命名法(camelCase),这就是报错的直接诱因。
修改后的可运行代码
只需要把F.rowNumber()替换成F.row_number()就能解决问题,完整代码如下:
from pyspark.sql.functions import first from pyspark.sql.types import * from pyspark.sql import * from pyspark.sql import Row, functions as F from pyspark.sql.window import Window import pyspark.sql.functions as func def Codes(pharmacyCodes): df_data = pharmacyCodes (df_data .select("MID", "claimid", F.row_number() # 这里修正为正确的函数名 .over(Window .partitionBy("MID") .orderBy("MID") ) .alias("rowNum") ) .show() )
额外优化建议
顺便提一句,你当前用orderBy("MID")其实没有实际意义——因为已经按MID分区了,同一分区内的MID值完全相同,排序不会改变行的顺序。如果需要生成有业务逻辑的行号,建议改成按claimid排序,比如orderBy("claimid"),这样行号会按理赔ID的顺序生成,更符合常见的业务场景。
内容的提问来源于stack exchange,提问作者techgiant
相关产品推荐
相关产品推荐

