Spark报错:'GroupedData'无'orderBy'属性,求动漫类型平均评分
问题原因与解决方法
错误原因
你遇到的'GroupedData' object has no attribute 'orderBy'错误,核心是调用顺序错误:
groupBy("Genre")执行后得到的是GroupedData对象,这个对象仅支持聚合类方法(比如avg()、sum()),并不包含orderBy排序方法。- 只有先调用聚合方法(比如
avg())生成新的DataFrame后,才能使用orderBy进行排序。
正确实现步骤
假设你的评分列名为Rating,按以下流程操作:
1. 分组计算平均评分
先通过聚合操作得到每个类型的平均评分,生成DataFrame:
# 替换Rating为你实际的评分列名 genre_avg_df = df.groupBy("Genre").avg("Rating")
2. (可选)对结果排序
如果需要按评分高低排序,对上面生成的DataFrame调用orderBy:
# 按平均评分降序排列,ascending=False表示从高到低 sorted_genre_avg = genre_avg_df.orderBy("avg(Rating)", ascending=False)
3. 转换为目标字符串格式
通过collect()取出数据,拼接成你想要的格式:
# 循环拼接每个类型和对应的平均评分,保留1位小数 result_str = " ".join([f"{row['Genre']} - {row['avg(Rating)']:.1f}" for row in sorted_genre_avg.collect()]) print(result_str)
错误写法示例(避坑)
你大概率是直接在groupBy后调用了orderBy,比如这种错误代码:
# 错误:GroupedData没有orderBy方法 df.groupBy("Genre").orderBy("Rating")
内容的提问来源于stack exchange,提问作者Ignaciogg
相关产品推荐
相关产品推荐

