Spark中最基本的数据抽象是RDD。
RDD(Resilient Distributed Dataset) 为弹性分布式数据集。
RDD 的特性
- 一组分区
- 对于每个切片(分区),有一个计算函数
- 与其它RDD的依赖关系
- 分区器 K-V
- 优先计算位置
创建RDD的方式
创建RDD的方式有三种
- 集合中创建
- 外部存储系统的数据集创建
- 其它RDD创建
集合中创建
Spark主要提供了两种函数parallelize 和 makeRDD
val value: RDD[Int] = sc.parallelize(List(1,2,3,4))
val value1: RDD[Int] = sc.makeRDD(List(1,2,3,4))
外部存储系统的数据集创建
//从外部存储系统获取RDD
val value: RDD[String] = sc.textFile("E:\\Dashuju\\hadoop\\SparkCore0821\\input\\1.txt")
value.collect().foreach(println)
//从hdfs获取rdd
val value1: RDD[String] = sc.textFile("hdfs://hadoop102:8020/input")
value1.collect().foreach(println)
从其它RDD创建
val mapRdd: RDD[Int] = rdd.map(_ * 2)
Spark 算子
Trasformation
map() 映射
mapPartitions() 以分区为单位进行map
mapPartitionsWithIndex() 带分区号,执行mapPartitions
flatMap() 扁平化 与map操作类似,区别是函数返回值为一个集合,并且将每一个该集合的元素拆分出来放到新的RDD中。数据一进,迭代器出。
glom() 将RDD的每一个分区转换为数组
groupBy() 分组 按照传入函数规则分组,存在shuffle过程。
filter() 过滤 接收一个返回值为布尔类型的函数为参数。过滤出为true的值放入新的RDD中。可能产生数据倾斜。不影响分区。
sample() 采样
不放回取样模型-伯努利算法 sample(false,0~1,seed)
放回取样模型-泊松算法 sample(true,2,seed)
distinct去重 对元素内部去重
coalesce() 合并分区 默认不走shuffle,也可以设置参数true,执行shuffle
repartition重新分区 走shuffle
sorBy() 排序默认正序排序
pipe() 调用脚本