Basic Transformations Tips

记录一些基本的Spark中的Transformation,由于课程要求使用Python,因此所有API都以PySpark为准。

Basic Transformations Tips

combineByKey()

combineByKey(createCombiner, mergeValue, mergeCombiners, numPartitions=None, partitionFunc=)

将一个RDD([K, V])变为RDD([K, C])
这里用 K 表示 KeyV 表示 ValuesC 表示组合结果(combine type),combineByKey()实际上是其他 *ByKey Transformation的基础

用户需要提供3个函数(Functions):

  1. createCombiner,该函数将一个V变为一个C(即创建一个只有一个元素的列表)
  2. mergeValue,该函数将一个V合并入一个C(即将元素添加入列表,这项操作在一个Partition内进行)
  3. mergeCombiners,该函数将两个C变为一个(即合并列表,该操作跨Partition进行)

其实这三个函数的作用很好理解,我们用一个例子来看,该例子是为了计算每个字母的值的总和以及计次

在这里插入图片描述
从上述的例子中,我们可以这么理解,实际上createCombiner就是决定在第一次遇见某个键值对(Key-vlue pair)时该怎么处理;mergeValue 就是再次遇见某个键值对(Key-vlue pair)时该怎么处理。

在这个例子中,我们有有几点需要注意一下:

  • 因为在partition 1和2中都有键(key)为 ‘B’ 的键值对,所以在这两个partitions中,我们都要对 <‘B’, * > 进行一次createCombiner
  • 注意collect,collect就是一个Action,整个流程直到collect被调用,才会被执行 (The whole procedure will not be excuted until collect be called)

reduceByKey()

reduceByKey(func, numPartitions=None, partitionFunc=)

使用用户定义的Function合并每个键(key)的值。
事实上,reduceByKey() 就是通过 combineByKey() 实现的,这也是我们之前说后者是所有 *ByKey 操作基础的原因
在这里插入图片描述

groupByKey()

groupByKey(numPartitions=None, partitionFunc=)

将RDD中每个键(key)的值分为单独一组。

在实际情况中,我们尽量避免使用 groupByKey() 。因为它不会在每个partition中将同键(key)的键值对进行合并,而reduceByKey() 会在每个partition内就进行合并。
用两张图就能直观对比
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值