CombineByKey可以很好地与pyspark python 2配合使用,但不能与python 3配合使用

2024-09-29 21:45:14 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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),
                        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))

找不到是什么python3变化导致了这种情况和替代方案。你知道吗


Tags: lambdakey功能mapdatavaluecountpython3
1条回答
网友
1楼 · 发布于 2024-09-29 21:45:14

pyspark中使用python3的以下代码可以工作:

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也有很多不同之处。你知道吗

相关问题 更多 >

    热门问题