Databricks运行PySpark combineByKey示例代码报语法错误排查
问题原因
触发语法错误的核心原因是Python版本语法不兼容。你使用的测试代码是Python 2环境下的旧PySpark示例写法,Python 3正式移除了lambda函数形参位置直接做元组嵌套解包的语法支持,因此最后一行定义的lambda (label, (value_sum, count))会被解释器判定为非法语法,和Databricks平台本身的运行配置无关。
修复方法
将lambda参数位置的元组解包逻辑移到函数体内部,通过索引取值即可兼容Python 3环境,修正后可直接运行的完整代码如下:
data = sc.parallelize([(0, 2.), (0, 4.), (1, 0.), (1, 10.), (1, 20.)]) sumCount = data.combineByKey( lambda value: (value, 1), lambda x, value: (x[0] + value, x[1] + 1), lambda x, y: (x[0] + y[0], x[1] + y[1]) ) # 修正参数解包写法,兼容Python 3 averageByKey = sumCount.map(lambda kv_pair: (kv_pair[0], kv_pair[1][0] / kv_pair[1][1])) # 打印运行结果验证 print(averageByKey.collect())
运行后输出结果为[(0, 3.0), (1, 10.0)],和原代码按key计算平均值的预期逻辑完全一致。
内容的提问来源于stack exchange,提问作者Ash3060
相关产品推荐
相关产品推荐

