spark快速大数据分析笔记_1

时间:2022-05-06 23:16:44

RDD 编程

创建RDD方法

  1. 读取外部数据集
  2. 在驱动器程序里分发驱动器程序的对象集合(比如list和set)
    转化操作: 会将一个RDD转化为另一个RDD
    行动操作: 对RDD计算一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统中(hdfs中)
  1. 在行动操作中first()中,spark只需扫描文件知道找到第一个匹配的行动为止,而不需要读取整个文件。
  2. 如果想早多个行动操作中重用一个RDD,可以使用RDD.persist(),让RDD缓存下来。

创建RDD

parallelize()方法,处理测试和开发使用,一般情况不会使用,毕竟这种方式需要把你的数据集先放到一台机器的内存中。

判断RDD是转化操作和行动操作

可以看看它的返回值类型:

转化操作:返回的是RDD类型
行动操作:返回其他的数据类型

转化操作

转化操作时惰性求值,只有在行动操作中用到这个RDD时才会计算。

val inputRDD = sc.textFile("read.md")
inputRDD.filter(_.contians("error"))
注:inputRDD不会改变已有的inputRDD中的数据,在后面可以继续使用

collect()函数

作用:可以用来获取整个RDD中的数据,只有当你的整个数据集能在单个机器的内存中方得下时,才能使用collect()。
注意:每当我们调用一个新的行动操作时,整个RDD都会从头开始计算,避免这种低效的行为,用户可以将中间结果持久化。

常用的转化操作和行动操作

  1. 针对各个元素进行操作
    map 输入函数,对每个元素运用这个函数,返回结果RDD
    filter 输入函数,对每个元素运用这个函数,满足条件的元素组成新RDD
    flatMap 将数据”扁平”处理,会得到个列表的元素组成的RDD,而不是各个列表组成的RDD。

  2. 伪集合操作

    distinct: RDD.distinct() 转化操作来生成一个包含不同元素的新RDD。distinct()操作开销很大,因为他需要将所有数据通过网络进行混洗(shuffle)。
    union(other): 会返回两个RDD中所有元素RDD。
    intersection: 返回两个RDD中都有的元素。性能较差,需要混洗。
    subtract(other):函数接受另外一个RDD为参数,返回一个由第一个RDD存在,而第二个RDD不存在的所有元素组成的RDD。需要混洗
    cartesian(): 笛卡尔积