pyspark计算最大值、最小值、平均值

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

 

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

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

 

 

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()
posted @ 2020-11-05 20:17  skaarl  阅读(2459)  评论(0编辑  收藏  举报