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)]