PySpark运行时报错TypeError: 不支持'int'和'str'类型相加怎么解决?
错误根因
报错的核心原因是语法逻辑错误:你将x.split(',')[2]转为整数后,直接用+运算符和字符串","做运算,Python不支持整数与字符串直接相加,因此触发类型报错。
同时你现有逻辑存在功能偏差:你要实现按年龄计算平均好友数,需要提前将RDD处理为**(年龄, 好友数)**的键值对格式,而不是将两个字段拼接为字符串,拼接后的字符串RDD也无法支撑后续的mapValues、reduceByKey算子运算。
修正方案
将构造RDD的代码调整为返回二元组格式即可,不需要做字符串拼接:
# 调整map返回值为(年龄:int, 好友数:int)的键值对二元组 rdd = lines.map(lambda x: (int(x.split(',')[2]), int(x.split(',')[3]))) # 后续统计逻辑无需修改即可正常运行 totalsByAge = rdd.mapValues(lambda x: (x, 1)).reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1])) averagesByAge = totalsByAge.mapValues(lambda x: x[0] / x[1]) results = averagesByAge.collect() for result in results: print(result)
内容的提问来源于stack exchange,提问作者radhika sharma
相关产品推荐
相关产品推荐

