Spark的分布式数据集RDD

本文深入解析Spark中RDD(弹性分布式数据集)的概念,包括其五大核心特性及对应的源码方法。介绍了Spark应用程序的开发流程,包括配置SparkConf和创建SparkContext。详细阐述了RDD的创建方式,如parallelize用于测试,External Datasets用于生产环境,以及通过已有RDD转换生成新RDD。同时,概述了RDD的主要操作类型,包括转换(transformation)和动作(action),并提供了具体的实例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.RDD介绍
(1)RDD介绍
RDD全称resilient distributed dataset(弹性分布式数据集)。他是一个弹性分布式数据集,是spark里面抽象的概念。代表的是一个不可变的,集合里面的元素可以分区的支持并行化的操作。
(2)源码描述RDD的五大特性

  • A list of partitions
  • A function for computing each split
  • A list of dependencies on other RDDs
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for
    an HDFS file)
    (3)五大特性对应的方法
1)A list of partitions 一系列的partition
      protected def getPartitions: Array[Partition]

2)A function for computing each split 针对RDD做操作其实就是针对RDD底层的partition进行操作
    rdd.map(_*2)
    def compute(split: Partition, context: TaskContext): Iterator[T]

3)A list of dependencies on other RDDs rdd之间的依赖
      protected def getDependencies: Seq[Dependency[_]] = deps

4)Optionally, a Partitioner for key-value RDDs partitioner     rdd的分片函数
      @transient val partitioner: Option[Partitioner] = None

5)Optionally, a list of preferred locations to compute each split on  locations
      protected def getPreferredLocations(split: Partition): Seq[String] = Nil

二、开发spark应用程序
1)SparkConf需要设置
appName
master
2)SparkContext(sparkConf)
3)spark-shell 启动时,使用master设置
–master local[2] 底层自动为我们创建了SparkContext

三、RDD创建方式
1)parallelize 适用于测试
2)External Datasets 生产
3)通过已有RDD转换过来的 生产

1)parallelize
scala> val rdd = sc.parallelize(List(1,2,3,4,5))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> rdd.collect
res0: Array[Int] = Array(1, 2, 3, 4, 5)

2)External Datasets
scala> val rdd = sc.textFile("file:///home/hadoop/data/wc.data")

3)通过已有RDD转换过来的
scala> val rdd1 = rdd.map(_*2)

四、RDD操作
transformation 转换
action 动作 触发 SparkContext 提交 作业
transformation将一个RDD转换成另一个RDD并不会立即执行,只有遇到action才会提交作业开始执行计算

举例:

transformation
- map:对数据集的每一个元素进行操作
- mapPartitions: 对每个分区进行处理
- mapValues 是针对RDD[K,V]的V做处理
- FlatMap:先对数据集进行扁平化处理,然后再Map
- Filter:对数据进行过滤,为true则通过
- destinct:去重操作

action
- reduce:对数据进行聚集
- reduceBykey:对key值相同的进行操作
- collect:没有效果的action,但是很有用
- saveAstextFile:数据存入文件系统
- foreach:对每个元素进行func的操作

rdd.mappartitions(_*2)是错误的
map是对每一条数据做处理的,mappartitions对分区的数据做处理的,分区内是有很多个int元素,是一个迭代的int
假如有100个元素 10个分区 作用于map和mapPartitions==> 知识点:要把RDD的数据写入MySQL Connection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值