1、groupByKey:
功能:
对KV类型的RDD按照Key进行分组,相同K的Value放入一 个集合列表中
,返回一个新的RDD
语法:
RDD【K,V】.groupByKey => RDD【K, List[V]】
举例:
如何构造sc对象并创建RDD 参考文章:
【Spark中创建RDD的两种方式】Spark中如何获取sc对象、以及创建RDD的两种方式
rdd1 = sc.parallelize([("word", 10), ("word", 5), ("hello", 100), ("hello", 20), ("spark", 1)], numSlices=3)
rdd2 = rdd1.groupByKey()
# 输出结果:("word",List[10,5]) ("hellos",[100,20]) ("spark",[1])
rdd2.foreach(lambda x: print(x[0], *x[1]))
# 其中 * 是打印 list 列表中的所有元素
2、reduceByKey:
功能:
对KV类型的RDD按照Key进行分组,并对相同Key的所有Value使用参数中的reduce函数进行聚合
语法:
def reduceByKey(self,f: (T,T) ->T,numPartitions,partitionFunction) ->RDD[Tuple[K,V]]
举例:
rdd1 = sc.parallelize([("word", 10), ("word", 5), ("hello", 100), ("hello", 20), ("spark", 1)], numSlices=3)
# 其中total是临时变量,记录的是value相加的值,num是每个value的值
rdd2 = rdd1.reduceByKey(lambda total,num: total + num)
# ("word",15) ("hellos",120) ("spark",1)
rdd2.foreach(lambda x: print(x[0], x[1]))