//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的更多相关文章

  1. hadoop学习之yarn资源管理

    一.yarn简介 yarn是在hadoop2.x中才引入的一个新的机制,在hadoop1.x中MapReduce任务需要同时做任务管理和资源分配,那么引入yarn之后,hadoop的资源管理的任务就全 ...

  2. spark 大杂烩

    累加器 val dataRdd = sc.makeRDD(List(1, 2, 3, 4), 2) var sum = 0 //累加器可以收集driver和各个excuter中累加的结果 //如果此处 ...

  3. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  4. sparkRDD:第3节 RDD常用的算子操作

    4.      RDD编程API 4.1 RDD的算子分类 Transformation(转换):根据数据集创建一个新的数据集,计算后返回一个新RDD:例如:一个rdd进行map操作后生了一个新的rd ...

  5. MongoDB Java Driver操作指南

    MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...

  6. c#操作MangoDB 之MangoDB CSharp Driver驱动详解

    序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...

  7. Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)

    一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...

  8. 设备模型(device-model)之平台总线(bus),驱动(driver),设备(device)

    关于关于驱动设备模型相关概念请参考<Linux Device Drivers>等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus) ...

  9. AM335x tscadc platform driver 相关代码跟踪

    TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...

随机推荐

  1. Linux常用命令 - top命令详解(重点)

    21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html top ...

  2. Journal of Proteome Research | Improving Silkworm Genome Annotation Using a Proteogenomics Approach (分享人:张霞)

    题目:Improving Silkworm Genome Annotation Using a Proteogenomics Approach 期刊:Journal of Proteome Resea ...

  3. 【python 数据结构】相同某个字段值的所有数据(整理成数组包字典的形式)

    class MonitoredKeywordMore(APIView): def post(self, request): try: # 设置原生命令并且请求数据 parents_asin = str ...

  4. (转载)Why you shouldn't use Entity Framework with Transactions

    Why you shouldn't use Entity Framework with Transactions EntityFramework This is a .net ORM Mapper F ...

  5. Vue-Cli4笔记

    Vue-Cli4与Vue-Cli2区别浅谈 当时学习 Vue-Cli 的时候看的是 Vue-Cli2 的相关教程,当把 package.json 上传 github 的时候提醒有安全问题,于是准备使用 ...

  6. 内置函数---eval、exec、compile

    eval() 将字符串类型的代码执行并返回结果 print(eval('1+2+3+4')) exec()将自字符串类型的代码执行 print(exec("1+2+3+4")) e ...

  7. JAVA正则-检验QQ是否合法

    /* * 0不能开头,全数字,位数5-10位 * 123456 */ public static void checkQQ(){ String QQ = " 123456 "; / ...

  8. navicat使用、pymysql连接数据库

    内容回顾 select distinct 字段1,字段2,... from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段 ...

  9. Matplotlib 精简实例入门

    Matplotlob 简明实例入门 通过几个实例,快速了解matplotlib.pyplot 中最为常见的折线图,散点图,柱状图,直方图,饼图的用法 如果您需要更为详细的内容,请参考官方文档: htt ...

  10. leetcode 945. 使数组唯一的最小增量

    题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 mov ...