sparkRdd driver和excuter
//1 从内存中创建makeRdd,底层实现就是parallelize
val rdd=sc.makeRDD(Array(1,2,"df",55)) //2 从中创建parallelize
val paraRdd=sc.parallelize(Array(1,2,3,54,5)) //3 从外部存储中创建
// 默认情况下,可以读取项目路劲,也可以读取其他路劲如hdfs
// 默认从文件中读取数据都是字符串类型
// 读取文件时,传递的分区参数为最小分区数,但不一定是这个分区数,取决与hadoop读取文件时的分片规则
val fileRdd=sc.textFile("path",2)
mapParitions的优缺点:
mapParitions可以对一个RDD中所有的分区进行遍历
mappartitions.效率优于map算子,减少了发送到执行器执行交互次数
mappartitions内存溢出是当一个分区数据过大,发送时执行的exctuer可能放不下,出现OOM
mapPartitionsWithIndex:
val listRdd = sc.makeRDD(1 to 10,2)
val indexRdd = listRdd.mapPartitionsWithIndex({
case (num, datas) => {
datas.map((_, "分区号:" + num))
}
}) indexRdd.foreach(println(_))
/**
*
* (6,分区号:1)
(1,分区号:0)
(7,分区号:1)
(2,分区号:0)
(8,分区号:1)
(3,分区号:0)
(9,分区号:1)
(10,分区号:1)
(4,分区号:0)
(5,分区号:0)
*/
driver和excuter:

代码分布:

上述代码执行没有问题,i可序列化。执行时会将i传输到excuter上,传输就牵扯io,就需要序列化。所以需要传输的内容必须能够序列化,否则就会报错。
val rdd3 = sc.makeRDD(List(1, 32, 3, 4, 5))
rdd3.foreach({
case i => {
println(i * 2) //Executor
}
}) rdd3.collect().foreach({
case i => {
println(i * 2) //Driver,collect后是一个数组,相当与把数据拿到driver中进行计算
}
})
glom将同一个分区的数据放到一个数组中
val rdd1 = sc.makeRDD(1 to 10,3)
val glomRddArr:RDD[Array[Int]] = rdd1.glom()
glomRddArr.foreach(arr=>{
val str = arr.mkString(",")
println(str)
})
/**
* 4,5,6
1,2,3
7,8,9,10
*/
shuffle操作
//将rdd中一个分区的数据打乱重组到其他不同分区的操作称为shuffle,如distinct
//rdd的操作牵扯到shuffle的算子效率就会降低。
val rdd2 = sc.makeRDD(1 to 10, 5)
//可以设置是否shuffle,默认是不shuffle。
// repairtition实际上默认是shuffle,底层是coalesce coalesce(num,shuffle=ture)
val coaRdd = rdd2.coalesce(2)
sparkRdd driver和excuter的更多相关文章
- hadoop学习之yarn资源管理
一.yarn简介 yarn是在hadoop2.x中才引入的一个新的机制,在hadoop1.x中MapReduce任务需要同时做任务管理和资源分配,那么引入yarn之后,hadoop的资源管理的任务就全 ...
- spark 大杂烩
累加器 val dataRdd = sc.makeRDD(List(1, 2, 3, 4), 2) var sum = 0 //累加器可以收集driver和各个excuter中累加的结果 //如果此处 ...
- 深入linux kernel内核配置选项
============================================================================== 深入linux kernel内核配置选项 ...
- sparkRDD:第3节 RDD常用的算子操作
4. RDD编程API 4.1 RDD的算子分类 Transformation(转换):根据数据集创建一个新的数据集,计算后返回一个新RDD:例如:一个rdd进行map操作后生了一个新的rd ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
- c#操作MangoDB 之MangoDB CSharp Driver驱动详解
序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- 设备模型(device-model)之平台总线(bus),驱动(driver),设备(device)
关于关于驱动设备模型相关概念请参考<Linux Device Drivers>等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus) ...
- AM335x tscadc platform driver 相关代码跟踪
TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...
随机推荐
- Java并发编程学习前期知识下篇
Java并发编程学习前期知识下篇 通过上一篇<Java并发编程学习前期知识上篇>我们知道了在Java并发中的可见性是什么?volatile的定义以及JMM的定义.我们先来看看几个大厂真实的 ...
- 读源码 - stagesepx
目录 背景 一.概述 stagesepx 二.源码中优雅的用法 优雅的赋值/返回 递归方法新建多级目录 更简洁的日志输出 格式化输出的另一种姿势 基于生成器读取多个文件 sorted进阶 入参类型限制 ...
- 【opencv系列02】OpenCV4.X图像读取与显示
一.读取图片 opencv中采用imread() 函数读取图像 imread(filename, flags=None) filename 图片的路径 flags 图像读取方式 ● c ...
- mysql索引查找原理及优化
常见查找方法 1.顺序查找(linear search ) 1. 最基本的查询算法当然是顺序查找(linear search),也就是对比每个元素的方法,不过这种算法在数据量很大时效率是极低的. 2. ...
- Java 14 发布了,再也不怕 NullPointerException 了!
2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 358: Helpful NullPoint ...
- 简单BBS项目开始(二)
登陆和生成图片验证码 1.生成图片 pillow 1.生成图片的模块pillow,在python中安装pillow,在Django中使用时用PIL2. 在页面上<img id="val ...
- 动态规划-区间dp-Palindrome Removal
2019-11-09 10:31:09 问题描述: 问题求解: n = 100,典型的O(n ^ 3)的动规问题.一般来说这种O(n ^ 3)的问题可以考虑使用区间dp来解决. 区间dp是典型的三层结 ...
- Alpine Linux 常用命令
一:Alpine Linux开启SSH远程登陆 1.简介: 最重要的一个服务了,远程登陆需要用它,文件传输需要用它,必备功能.不管你是在实体机上跑,虚拟机上跑,docker里面跑,这个都是必须的. 2 ...
- 搜索引擎如何检索结果:Python和spaCy信息提取简介
概览 像Google这样的搜索引擎如何理解我们的查询并提供相关结果? 了解信息提取的概念 我们将使用流行的spaCy库在Python中进行信息提取 介绍 作为一个数据科学家,在日常工作中,我严重依赖搜 ...
- React Hooks Typescript 开发的一款 H5 移动端 组件库
CP design 使用 React hooks Typescript 开发的一个 H5 移动端 组件库 English | 简体中文 badge button icon CP Design Mobi ...