Unknownunknownshangke

Spark快速上手(2)Spark核心编程-RDD简介

Shangke·2022-07-01 10:10·190 次阅读

Spark快速上手(2)Spark核心编程-RDD简介

Spark计算框架为适应高并发和高吞吐的数据处理需求,封装了三大数据结构,以处理不同应用:
1)RDD:弹性分布式数据集
2)累加器:分布式共享只写变量
3)广播变量:分布式共享只读变量

RDD(1)#

什么是RDD#

RDD(Resilient Distributed Dataset)弹性分布式数据集,为Spark中最基本的数据处理模型。
它是一个抽象类,代表弹性、不可变、可分区且其中元素可并行计算的集合。
1)弹性:多方面(存储、容错、计算、分片)
2)分布式:数据存储在集群不同节点上
3)数据集:RDD只封装计算逻辑,不保存数据
4)数据抽象:RDD需要子类实现
5)不可变:RDD封装的计算逻辑不可改变,只能产生根据原来的RDD产生新的RDD,并在其中封装计算逻辑
6)可分区、并行计算

核心属性#

1)分区列表
RDD数据结构中存在分区列表,用于并行计算,是实现分布式计算的重要属性
2)分区计算函数
Spark在计算时,是使用分区函数对每一个分区进行计算
3)RDD之间依赖关系
RDD是计算模型的封装,如果需求包含多个计算模型的组合,就需要多个RDD建立依赖关系
4)分区器(option)
数据为KV类型(key-value),可以通过设定分区器自定义数据的分区
5)首选位置(option)
计算数据时,可根据计算节点状态选择节点位置进行计算

基础编程#

RDD创建#

在Spark中从创建RDD的方式有四种:
1)集合中创建RDD,Spark主要提供两个方法:parallelize、makeRDD
e.g.

Copy
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark") val sparkContext = new SparkContext(sparkConf) val rdd1 = sparkContext.parallelize(List(1,2,3,4)) val rdd2 = sparkContext.makeRDD(list(1,2,3,4)) rdd1.collect().foreach(println) rdd2.collect().foreach(println) sparkContext.stop()

makeRDD方法从底层实现看就是parallelize方法
2)从外部存储(文件)创建RDD
由外部存储系统的数据集创建RDD包括:本地的文件系统、所用Hadoop支持的数据集(譬如HDFS、HBase)
e.g.

Copy
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark") val sparkContext = new SparkContext(sparkConf) val fileRDD:RDD[String] = sparkContext.textFile("input") fileRDD.collect().foreach(println) sparkContext.stop()

3)从其他RDD创建
通过一个RDD运算完后,再产生新的RDD。
4)直接创建RDD(new)
使用new的方式直接构造RDD,一般由Spark框架自身使用

RDD并行度与分区#

e.g.

Copy
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark") val sparkContext = new SparkContext(sparkConf) val dataRDD:RDD[Int] = sparkContext.makeRDD(List(1,2,3,4),4) val fileRDD:RDD[String] = sparkContext.textFile("input",2) fileRDD.collect(),foreach(println) sparkContext.stop()

默认情况下,Spark可以将一个作业切分多个任务后,发送给Executor节点并行计算,能够并行计算的任务数量称之为并行度。
这个数量可以再构建RDD时指定。不过需要注意的是,这里并行执行的任务数量,不是指切分任务的数量

posted @   Unknown尚可  阅读(190)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
目录