IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> sparkCore-核心、算子 -> 正文阅读

[大数据]sparkCore-核心、算子

一、Spark核心

1.RDD
1)概念:
RDD(Resilient Distributed Dateset),弹性分布式数据集
2)RDD的五大特性
1.RDD是由一系列的partition组成的。
2.函数是作用在每一个partition(split)上的。
3.RDD之间有一系列的依赖关系。
4.分区器是作用在K,V格式的RDD上的。
5.RDD提供一系列最佳的计算位置。
3)RDD的理解图:

在这里插入图片描述

4)注意:
1.textFile方法底层封装的是读取MR读取文件的方式,读取文件之前先split,默认split大小为一个block大小。
2.RDD实际上不存储数据,为了方便理解,暂时理解为存储数据。
3.什么是K,V格式的RDD?
	如果RDD里面存储的数据都是二元组对象,那么就将这个RDD称为K,V格式的RDD。
4.哪里体现RDD的弹性(容错)?
	partition数量,大小没有限制,体现了RDD的弹性(容错)
	RDD之间存在依赖关系,可以基于上一个RDD重新计算出RDD。
5.哪里体现RDD的分布式?
	RDD是由partition组成的,partitiong是分部在不同节点上的。
6.RDD提供计算最佳位置,体现了数据本地化,体现了大数据中“计算移动数据不移动”的理念。
2.Java和Scala中创建RDD的方式
Java:
	sc.textFile("./xxx",numPartitions)	//其中./xxx表示文件存储位置,numPartitions表示分区数
	sc.paralleliza(集合,num)		
	sc.parallelizaPairs(Tuple2<xx,xx>集合,num)
Scala:
	sc.textFile("./xxx",numPartitions)	//其中./xxx表示文件存储位置,numPartitions表示分区数
	sc.paralleliza(集合,num)		
	sc.makeRDD(集合,num)
3.Spark执行任务的原理

在这里插入图片描述

如上图:有四个机器节点,Driver和Worker是启动在节点上的进程,运行在JVM中的进程。
	1.Driver与集群节点之间有频繁的通信。
	2.Driver负责任务(tasks)的分发和结果的回放。任务的调度。如果task的计算结果非常大就不需要回收,如果回收,会造成oom。
	3.Worker是Standalone资源调度框架里面资源管理的从节点。也是JVM的进程。
	4.Master是Standalone资源调度框架里面资源管理的主节点。也是JVM的进程。

二、Spark转换算子和行动算子

1.Transformations转换算子
1)概念
Tansformations类算子是一类算子(函数),叫做转换算子,如:map,flatMap,reduceByKey等。
Transformations算子是延迟执行,也叫懒加载执行。
2)Transformations类算子
filter:过滤符合条件的记录数,true保留,false过滤掉
val rdd1 = sc.parallelize(List[String]("java","java","spark","hadoop","hive"))
rdd1.filter(word=>"hive".equals(word)).foreach(println)

结果打印输出为:
hive 
map:将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。特点:输入一条,输出一条数据。
val rdd1 = sc.parallelize(List[String]("java","java","spark","hadoop","hive"))
rdd1.map(word=>{"hello "+ word}).foreach(println)

输出结果为:
hello java
hello java
hello spark
hello hadoop
hello hive
flatMap:先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
val rdd1 = sc.parallelize(List[String]("java spark hadoop hive sqoop"))
rdd1.flatMap(word=>word.split(" "))foreach(println)
输出结果为:
java
spark
hadoop
hive
sqoop
sample:随机抽样算子,根据传进去的小数按比例进行有放回或者无放回的抽样。

sample(有无放回抽样,抽样比例,抽样种子): 抽样种子是将第一次抽样的种子作为后面每次抽样的种子,进而保证抽样最终得到的结果保持不变

val rdd1 = sc.parallelize(List[Int](1,2,3,4,5,6,7,8,9,10))
rdd1.sample(true,0.5,10L).foreach(println)
输出结果为:
2
7
9
9
reduceByKey:将相同的key根据相应的逻辑进行处理。
val rdd1 = sc.parallelize(List[(String, Int)](
      ("1", 10),
      ("1", 20),
      ("2", 18),
      ("3", 10),
      ("3", 30),
      ("4", 18)
    ))
rdd1.reduceByKey((v1,v2)=>{v1+v2}).foreach(println)
输出结果为:
(4,18)
(2,18)
(3,40)
(1,30)
sortByKey/sortBy:作用在K,V格式的RDD上,对key进行升序或者降序排序
sortByKey:
val rdd1 = sc.parallelize(List[(String, Int)](
      ("1", 10),
      ("1", 20),
      ("2", 18),
      ("3", 10),
      ("3", 30),
      ("4", 18)
    ))
rdd1.sortByKey(true).foreach(println)	//参数true为升序排序
输出结果为:
(1,10)
(1,20)
(2,18)
(3,10)
(3,30)
(4,18)

sortBy:
val rdd1 = sc.parallelize(List[(String, Int)](
      ("1", 10),
      ("1", 20),
      ("2", 18),
      ("3", 10),
      ("3", 30),
      ("4", 18)
    ))
rdd1.sortBy(_._2,true).foreach(println)	//通过value值进行升序排序
2.Action行动算子
1.概念:
Action类算子也是一类算子(函数)叫做行动算子。
如:foreach,collect,count等。
Transformations类算子是延迟执行的,Action类算子是触发执行。一个application应用程序中有几个Action类算子执行,就有几个job运行。
2.Action类算子
count:返回数据集中的元素。会在结果计算完成后回收到Driver端。
val rdd1 = sc.parallelize(List[Int](1,2,3,4,5,6,7,8,9,10))
println(rdd1.count())
输出结果为:
10
take(n):返回一个包含数据集前n个元素的集合。
val rdd1 = sc.parallelize(List[Int](1,2,3,4,5,6,7,8,9,10))
rdd1.take(4).foreach(println)
输出结果为:
1
2
3
4
first:first=take(1),返回数据集中的第一个元素。
foreach:遍历循环数据集中的元素,运行响应的逻辑
collect:将计算结果返回给Driver端
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:16:50  更:2021-08-04 11:18:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:04:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码