需求:使用pyspark计算相同key的最大值、最小值、平均值

说明: 最大值和最小值好计算,直接reduceByKey后使用python内置的max、min方法

平均值计算提供两种计算方法,直接先上代码和运行结果,后面有代码记录

3c30262aaf94bb26f0788c039cc1b94e.png

def main():

sc = SparkContext(conf=SparkConf())

rdd1 = sc.parallelize([("a", 3), ("a", 2), ("b", 5), ("b", 3), ("c", 8), ("c", 1)]).cache()

# 最大值

rdd2 = rdd1.reduceByKey(max)

# 最小值

rdd3 = rdd1.reduceByKey(min)

# 平均值方法1

rdd4 = rdd1.groupByKey().mapValues(list).map(lambda x: (x[0], sum(x[1])/len(x[1])))

# 平均值方法2

rdd5 = rdd1.combineByKey(lambda x: (x, 1),

lambda x, y: (x[0]+y, x[1]+1),

lambda x, y: (x[0]+y[0], x[1]+y[1])).map(lambda x: (x[0], x[1][0]/x[1][1]))

print(rdd2.collect())

print(rdd3.collect())

print(rdd4.collect())

print(rdd5.collect())

if __name__ == '__main__':

main()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐