00_pyspark_什么是RDD

什么是RDD

分布式计算会带来的问题有:

  1. 分区控制
  2. Shuffle控制
  3. 数据存储\序列化\发送
  4. 数据计算API
  5. 等一系列的问题

这些功能不能使用python内置的本地集合对象(List\字典等)去完成,我们在分布式框架中,需要有一个统一的数据抽象的对象,来实现上述分布式计算所需要的功能
这个对象就是RDD
RDD(Reslient Distributed Dataset):弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变的,可分区,里面的元素可并行计算的集合。Distributed分布式,RDD中数据的存储是分布式存储的(RDD的数据是跨越机器来存储的跨进程)

Internally,each RDD is characterized by five main properties:

  1. A list of partitions
  2. A function for computing each split (计算方法都会作用到每一个分片(分区)之上)
  3. A list of dependencies on other RDD (RDD之间有依赖关系)
  4. Optionally, a Partitioner for key-value RDDs
  5. Optionally, a list of preferrd location to compute each split on (RDD分区数据的读取会尽量数据读取所在地)

RDD中的分区是RDD数据存储的最小单位,分区是物理概念,以多个分区物理的对象抽象成一个逻辑上的概念RDD。

import findspark

findspark.init()
from pyspark import SparkContext, SparkConf

conf = SparkConf().setAppName("rdd_init").setMaster("local[*]")
sc = SparkContext(conf=conf)

rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7], 3)

print(rdd.glom().collect())

在这里插入图片描述
Key-Value型的RDD是可以分区器,默认分区器:Hash分区规则,也可以手动设置一个分区器(rdd.partitionBy的分区方法来设置),这个特性是可能吗,因为不是所有的RDD都是k-v型的;
RDD的分区规划,会尽量靠近数据所在的服务器,这样可以走本地读取,避免网络读取,本地读取的性能是大于网络读取的性能,spark会在确保并行计算的能力的前提下,尽量的去确保本地读取,所以这个特性也是可能的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值