CombineByKey可以与pyspark python 2配合使用,但不能与python 3配合使用
使用python2的pyspark可以实现以下功能:CombineByKey可以与pyspark python 2配合使用,但不能与python 3配合使用,python,python-3.x,pyspark,Python,Python 3.x,Pyspark,使用python2的pyspark可以实现以下功能: data = [ ('A', 2.), ('A', 4.), ('A', 9.), ('B', 10.), ('B', 20.), ('Z', 3.), ('Z', 5.), ('Z', 8.), ('Z', 12.) ] rdd = sc.parallelize( data ) sumCount = rdd.combineByKey(lambda value: (value, 1),
data = [
('A', 2.), ('A', 4.), ('A', 9.),
('B', 10.), ('B', 20.),
('Z', 3.), ('Z', 5.), ('Z', 8.), ('Z', 12.)
]
rdd = sc.parallelize( data )
sumCount = rdd.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])
)
averageByKey = sumCount.map(lambda (key, (totalSum, count)): (key, totalSum / count))
averageByKey.collectAsMap()
该行:
averageByKey = sumCount.map(lambda (key, (totalSum, count)): (key, totalSum / count))
python3下的返回:
SyntaxError: invalid syntax
File "<command-2372155099811162>", line 14
averageByKey = sumCount.map(lambda (key, (totalSum, count)): (key, totalSum / count))
SyntaxError:无效语法
文件“”,第14行
averageByKey=sumCount.map(lambda(key,(totalSum,count)):(key,totalSum/count))
找不到是什么python3更改导致了这种情况和替代方案。使用python3的pyspark中的以下代码有效:
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]))
averageByKey = sumCount.map(lambda label_value_sum_count: (label_value_sum_count[0], label_value_sum_count[1][0] / label_value_sum_count[1][1]))
print(averageByKey.collectAsMap())
正确返回:
{0: 3.0, 1: 10.0}
python2和python3有一些不同,python2也有很多东西 可能是重复的,或者我没有发现@paultIt是一个常见的,虽然不太为人所知的,2比3的变化,但我以前被它烧坏了。@pault:它帮助了我,但没有提供答案,只是间接地。我想它回答了这个问题。