【博学谷学习记录】超强总结,用心分享 | spark知识点总结2

发布时间 2023-05-31 21:13:41作者: 牛牛牛牛牛牛牛牛

【博学谷IT技术支持】

Action动作算子

  • reduce: 通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的
  • collect: 在驱动程序中,以数组的形式返回数据集的所有元素
  • count: 返回RDD的元素个数
  • first: 返回RDD的第一个元素(类似于take(1))
  • take: 返回一个由数据集的前n个元素组成的数据
  • takeSample:返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于发送指定随机数生成器种子
  • takeOrdered: 返回自然顺序或者自定义顺序的前n个元素
  • saveAsTextFile:将数据集以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark会调用toString方法,将它转换为文件中的文本
  • saveAsSequenceFile:将数据集中的元素以 Hadoop sequencefile 的格式保存到指定的目录下,可以使 HDFS 或者其他 Hadoop 支持的文件系统
  • saveAsObjectFile: 将数据集的元素,以java序列号化的方式保存到指定的目录下
  • countByKey:针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数
  • foreach:数据集的每一个元素上,运用函数func进行更新
  • foreachPartition:在数据集的每一个分区上,运行函数func

统计操作

算子 含义
count 个数
mean 均值
sum 求和
max 最大值
min 最小值
variance 方差
sampleVariance 从采样中计算方差
stdev 标准差:衡量数据的离散程度
sampleStdev 采样的标准差
stats 查看统计结果

RDD的持久化/缓存

RDD通过persist或cache方法可以将前面的计算结果缓存, 但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。cache 最终也是调用了 persist 无参方法(默认存储只存在内存中)

持久化级别 说明
MORY_ONLY(默认) 将 RDD 以非序列化的 Java 对象存储在 JVM 中。如果没有足够的内存存储 RDD,则某些分区将不会被缓存,每次需要时都会重新计算。这是默认级别
MORY_AND_DISK(开发中可以使用这个) 将 RDD 以非序列化的 Java 对象存储在 JVM 中。如果数据在内存中放不下,则溢写到磁盘上.需要时则会从磁盘上读取
MEMORY_ONLY_SER (Java and Scala) 将 RDD 以序列化的 Java 对象(每个分区一个字节数组)的方式存储.这通常比非序列化对象(deserialized objects)更具空间效率,特别是在使用快速序列化的情况下,但是这种方式读取数据会消耗更多的 CPU
MEMORY_AND_DISK_SER (Java and Scala) 与 MEMORY_ONLY_SER 类似,但如果数据在内存中放不下,则溢写到磁盘上,而不是每次需要重新计算它们
DISK_ONLY 将 RDD 分区存储在磁盘上
MEMORY_ONLY_2, MEMORY_AND_DISK_2 等 与上面的储存级别相同,只不过将持久化数据存为两份,备份每个分区存储在两个集群节点上
OFF_HEAP(实验中) 与 MEMORY_ONLY_SER 类似,但将数据存储在堆外内存中。(即不是直接存储在 JVM 内存中)
  • RDD持久化/缓存的目的是为了提高后续的操作的速度
  • 缓存的级别由很多,默认值只存在内存中,开发中使用memory_and_disk
  • 只有执行action操作的时候才会真正将RDD数据进行持久化/缓存
  • 实际开发中如果某个RDD后续会被频繁使用,可以将该RDD进行持久化缓存