SparkCore之RDD概述

一、RDD简介

RDD:弹性、分布式、数据集(resilient distrubuted dataset)

1、弹性:分区数量可以调整

2、分布式:

  • 可分区的集合(partitioned collection)
  • 对于分区的数据可以以并行的方式操作(parallel)

3、数据集

  • 不可变的(immutable):RDDA==>map==>RDDB(新的RDD)

简单来说,RDD是一个可以拆分,以并行方式处理的数据集

二、RDD特性

1、一系列的分区(A list of partitions)

2、对RDD进行fun就是对每个分区(split)进行fun(A function for computing each split)

3、RDD之间有依赖关系 (A list of dependencies on other RDDS)==>可以恢复数据,达到容错

4、分区器作用在KV类型的RDD上(A Partioner for key-value RDDS)

5、最佳计算位置:移动计算,而不是移动数据

三、RDD操作

3.1 入口点:SparkContext

 val sparkConf = new SparkConf().setMaster("local").setAppName(this.getClass.getSimpleName)
 val sc = new SparkContext(sparkConf)

SparkConf的核心数据结构是:K-V

  private val settings = new ConcurrentHashMap[String, String]()

setMaster源码

  def setMaster(master: String): SparkConf = {
    set("spark.master", master)
  }

如果要定义自己的参数传递到Spark中,要以spark.开头

3.2 RDD的创建

1、测试

//numSlices分区数,如果不设置默认使用local[core]
val rdd = sc.parallelize(Array(1,2,3),2)

2、外部数据源

val distFile = sc.textFile("data.txt")

textFile源码

def textFile(
      path: String,
      minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString).setName(path)
  }

底层还是使用HadoopFile读取数据,返回HadoopRDD,也就是返回偏移量和数据,但是偏移量没有用,所以再对Tuple(offset,line)进行map取第二个元素获取每行数据内容,最终返回MapPartitionRDD.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值