(六)Spark源码理解之RDD----part1

本文介绍了RDD的基本转换操作,包括map和flatMap函数的应用场景与区别。通过具体的代码示例,展示了如何使用这些函数来处理数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(3)针对分区的计算函数

接下来讲讲RDD的各种函数操作,正是有了这些函数才使得RDD能完成各自功能

3.1.转换

    RDD中有各种转换操作,正是因为有了这些转换操作,我们才能实现各种应用程序,正如之前我们所说RDD实质上就是一个Java类,因此它的各种转换操作其实也就是RDD类中的方法,转换操作其实就是从RDD类生成了其他的类,如MappedRDD,FilteredRDD类等等

3.1.1 map


map函数对RDD中的每一个元素都调用了f函数生成新值,最终新值集合生成了MappedRDD,是一对一的操作


如:

val disData=sc.parallelize(Array(1,2,3,4,5),2)

val d=disData.map(s=>s+2)

结果:d=3,4,5,6,7

map()函数的得到的新的RDD的分区信息和父RDD一致

3.1.2 flatMap


flatMap()函数也是对RDD中的每一个元素都调用了f函数,生成新值,最终新值集合生成了FlatMappedRDD,不同于map()函数的是它是一对多的操作

如:

val disData=sc.parallelize(Array(1,2,3),2)

val d1=disData.map(s=>1to s).collect

val d2=disData.flatMap(s=>1to s).collect

结果:d1会出错,因为map是一对一的操作;d2=Array(1,1,2,1,2,3)

此外,下面这个例子也能说明map和flatMap的不同,不过一般在Spark中不会经常体现出

如:

val xs = Map("a" ->List(11,111), "b" ->List(22,222)

val d1= xs.map(_._2)

val d2= xs.flatMap(_._2)

结果:

d1=List(List(11,111),List(22,222));d2=List(11,111,22,222);

flatMap()函数的得到的新的RDD的分区信息和父RDD一致

未完待续。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值