spark(一):RDD基础知识


一:什么是RDD

        spark之中的RDD就是分布式对象集合,每个RDD可以分为不同的分区,这些分区运行在不同的节点之上。对于RDD一般有两种操作,转化操作和行动操作,注意转化操作是惰性的,也就是等待执行行动操作才会执行转化操作。默认情况下spark会对每次行动操作都重新计算,如果想要重用,使用RDD.Persist()把这个RDD缓存下来


二:创建RDD 

    1:从外部文件读取为RDD

    2:代码集合等创建RDD

三:RDD操作

1:转化操作

    (1)fifter操作不会改变原来的RDD,会返回一个新的RDD

    (2)union操作连接操作,连接两个RDD

2:行动操作

    (1)take函数获取RDD的前几行, 这种取值是随机的

    (2)collection会汇总RDD的所有数据到内存之中,所以这种操作应该避免在集群上进行操作,可以在test阶段观察结果

四:传递函数

        spark支持函数式变成,具体参考《Java8函数式编程》

五:常见的转化操作和行动操作

      (1)针对各个元素的转化操作map,将原RDD映射为一个新的RDD

    (2)faltMap映射结果为一对多

    (3)distinct操作返回一个只包含不同元素的RDD,开销很大,会通过网路在各个节点之间交换数据进行shuffle

    (4)union返回一个包含两个RDD所有元素的RDD

    (5)intersection返回两个RDD共有的元素,注意其会去除重复的元素,所以性能很差,因为要在各个节点之中交换数据去除重复的

    (6)subtract,接受另一个RDD,返回只存在第一个RDD不存在第二个RDD之中的元素组成的RDD,同样需要shuffle

    (7)cartesian返回两个RDD的笛卡尔积

    (8)reduct函数是行动操作,可以求元素累加、元素个数和其他类型的聚合操作,要求返回值类型和reduct之中的类型必须相同

    (9)agregate函数可用来求平均值,不需要返回值类型和操作的类型相同

    (10)collect函数,收集所有的RDD的元素

    (11)take(n)

六:持久化

        为了避免重复计算,可以选择让Spark持久化已经计算的RDD,如果某个节点缓存丢失,那么使用的时候Spark会重算丢失的数据,如果不希望因此拖慢速度可以选择备份RDD到多个节点之上 默认情况下persist会把数据缓存到JVM的堆内存上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。