spark-0

Spark中的RDD就是一个不可变的分布式对象集合,每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。
RDD可以包含Rython Java Scala中任意类型的对象,甚至可以包含用户自定义的对象
用户可以使用两种方法创建RDD:读取一个外部数据集,或在驱动程序里分发驱动器程序中的对象集合(list set)

RDD支持两种操作:转化操作和行动操作。
转化操作:由一个RDD生成一个新的RDD
行动操作:会对RDD计算出一个结果,并把结果返回到驱动程序中,或把结果存储到外部存储系统中(HDFS)中
转换操作和行动操作的区别在于spark计算RDD的方式不同,虽然你可以在任意的时候定义新的RDD,但Spark只会惰性
计算这些RDD,它们只有第一次在一个行动操作中用到时,才会真正计算。如果一开始Spark就计算这些RDD,显然占用
内存会比较大,而且我们还要筛选这些数据,相反,一旦Spark了解了完整的转换操作链之后,他就可以只计算求结果
时真正需要的数据,事实上,在行动操作first()中,Spark只需要扫描文件直到找到第一个匹配的行为位置,不需要
读取整个文件。
spark的RDD会在你每次对他们进行行动操作时重新计算,如果想多个行动中共用同一个RDD,可以使用RDD.persist()让
Spark把这个RDD缓存下来,我们可以让Spark把数据持久化到许多地方,可用的选项

创建RDD :
1. 读取外部数据集。
2. 在驱动程序中对一个集合进行并行化。parallelize
RDD操作:
转换操作和行动操作,spark对待转换操作和行动操作的方式很不一样,因此理解你正在进行的操作的类型是很重要的
转换操作返回的类型的RDD, 而行动操作返回的是其他的数据类型。

spark会将程序中派生出来的RDD,使用谱系图来记录这些不同RDD之间的依赖关系,Spark需要用这些信息来按需计算
每个RDD,也可以依靠谱系图在持久化的RDD丢失部分数据时恢复所丢失的数据。

RDD转换为集合 collect (全部,占用内存) 或者take(n)
惰性求值的优点:把一些列操作合并到一起来减少计算数据的步骤。

传递函数
Spark的大部分转换操作和一部分行动操作,都需要依赖用户传递函数来计算,匿名内部类
常见的转换操作和行动操作

flatMap map 的区别:flatMap看做将返回的迭代器牌匾,map返回的是集合的集合,flatMap返回的集合。
RDD转换操作:map flatMap(切分单词) filter distinct
两个RDD的操作:union intersection substract cartsian
行动操作:reduce fold

Java :各种RDD的特殊类型间的转换更为明确。java中有两个专门的类JavaDoubleRDD和JavaPairRDD来处理特殊类型的
RDD,这两个类还针对这些类型提供了额外的函数,这让你可以更加了解所发生的一切,但是也显得有些累赘。
要构建特殊类型的RDD创建出一个DoubleRDD,我们就应当在映射操作中使用DoubleFunction来替代Funcation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值