PySpark实战:foldByKey操作

来自CloudWiki
跳转至: 导航搜索

介绍

foldByKey操作是一个变换算子

此操作作用于元素为KV格式的RDD,

它的作用是对RDD每个元素按照Key进行func定义的逻辑进行处理

func包含两个参数a,b,其中a的初始值为value ,后续代表累计值,而b代表的是当前元素值。

代码

import findspark
findspark.init()
##############################################
from pyspark.sql import SparkSession
spark = SparkSession.builder \
        .master("local[1]") \
        .appName("RDD Demo") \
        .getOrCreate();
sc = spark.sparkContext
#############################################
rdd = sc.parallelize([("a", 1), ("b", 2), ("a", 3),("b", 5)])
rdd2=rdd.foldByKey(0, lambda x,y:x+y)
# [('a', 4), ('b', 7)]
print(rdd2.collect())
rdd3=rdd.foldByKey(1, lambda x,y:x*y)
# [('a', 3), ('b', 10)]
print(rdd3.collect())
##############################################
sc.stop()


rdd.foldByKey(0, lambda x,y:x+y)

foldByKey包含两个参数a,b,其中a的初始值为value ,后续代表累计值,而b代表的是当前元素值。

首先按照key进行分组处理,当key为"a"时,第一次遍历时,x=0,y=1 即x+y=1;第二次遍历时,x=1,y=3,即x+y=4;

当key为“b"时,遍历的道理类似

输出

[('a', 4), ('b', 7)]

[('a', 3), ('b', 10)]