RDD的创建

1)从内存中创建

从集合中创建RDD,Spark主要提供了两种函数:parallelize和makeRDD

    val raw: RDD[Int] = sc.parallelize(1 to 16)
val raw: RDD[Int] = sc.makeRDD(1 to 16)

2)从外部文件中创建

    val line: RDD[String] = sc.textFile("E:/idea/spark2/in/info.log")

RDD的分区数

从内存中创建RDD的分区,得到分区数的源码如下:

def parallelize[T: ClassTag](
seq: Seq[T],
numSlices: Int = defaultParallelism): RDD[T] = withScope {
assertNotStopped()
new ParallelCollectionRDD[T](this, seq, numSlices, Map[Int, Seq[String]]())
}
/*
如果没有指定分区数量这个参数,那么就采用默认的分区数量defaultParallelism,
那么这个参数如何得到的呢?
*/
override def defaultParallelism(): Int = {
conf.getInt("spark.default.parallelism", math.max(totalCoreCount.get(), 2))
} def getInt(key: String, defaultValue: Int): Int = catchIllegalValue(key) {
getOption(key).map(_.toInt).getOrElse(defaultValue)
} /*
它会拿着spark.default.parallelism这个配置文件中的参数,去配置文件中获取值;
如果这个值没有,也就是没配,那么就由:
math.max(totalCoreCount.get(), 2)来决定;
即核数和2中的最大值;
*/

从文件系统中宏创建分区,得到分区数的原码原码如下:

 def textFile(
path: String,
minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
assertNotStopped()
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
minPartitions).map(pair => pair._2.toString).setName(path)
}
/*
同样的,如果分区数这个参数没有被指定,就由defaultMinPartitions这个参数决定;
*/ def defaultMinPartitions: Int = math.min(defaultParallelism, 2) /*
这个参数是由 math.min(defaultParallelism, 2)这个表达式来决定的;
defaultParallelism这个参数的计算方式同上;所以,如果没有指定分区数量,分区数量一般都是2;
*/

接下来验证对上述原码理解

从内存中创建:

 def main(args: Array[String]): Unit = {

    val sc: SparkContext = new SparkContext(new SparkConf()
.setMaster("local[*]").setAppName("spark")
.set("spark.default.parallelism","3"))
/*通过sparkconf对象的set方法来配置spark.default.parallelism这一参数*/ val raw: RDD[Int] = sc.makeRDD(Array[Int](1, 2, 3, 4, 5, 6))
raw.saveAsTextFile("E:/idea/spark2/out")
}

查看分区数,发现数据被分散在三个分区:

从文件系统创建:

 def main(args: Array[String]): Unit = {
val sc: SparkContext = new SparkContext(new SparkConf()
.setMaster("local[*]").setAppName("spark")
.set("spark.default.parallelism","3")) val raw: RDD[String] = sc.textFile("E:/idea/spark2/in/word.txt")
raw.saveAsTextFile("E:/idea/spark2/out/word")
}

但是这次的分区数只有两个:

RDD(二)——创建的更多相关文章

  1. Spark-Core RDD的创建

    一.RDD创建的3种方式: 1.从集合中创建RDD 2.从外部存储创建RDD 3.从其他RDD转换得到新的RDD 二.从集合中创建RDD 1.使用parallelize函数创建 scala> v ...

  2. 【Spark】快来学习RDD的创建以及操作方式吧!

    目录 RDD的创建 三种方式 从一个集合中创建 从文件中创建 从其他的RDD转化而来 RDD编程常用API 算子分类 Transformation 概述 帮助文档 常用Transformation表 ...

  3. MVC5 网站开发之二 创建项目

    昨天对项目的思路大致理了一下,今天先把解决方案建立起来.整个解决包含Ninesky.Web.Ninesky.Core,Ninesky.DataLibrary等3个项目.Ninesky.Web是web应 ...

  4. Spark RDD概念学习系列之RDD的创建(六)

    RDD的创建  两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS.Cassandra.H ...

  5. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  6. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  7. 爬虫(二)-创建项目&应用

    一.回顾 上篇已经讲解了python-django的环境搭建,本次将继续上次的课程,开始创建项目及应用. 上篇的验证结果为: 本次将加上创建应用之后浏览器打开演示~ 二.创建项目 1)使用django ...

  8. AOP源码解析之二-创建AOP代理前传,获取AOP信息

    AOP源码解析之二-创建AOP代理前传,获取AOP信息. 上篇文章对AOP的基本概念说清楚了,那么接下来的AOP还剩下两个大的步骤获取定义的AOP信息,生成代理对象扔到beanFactory中. 本篇 ...

  9. NET中的规范标准注释(二) -- 创建帮助文档入门篇

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...

随机推荐

  1. 转: 十大Intellij IDEA快捷键

    Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...

  2. Spring学习(三)——@PropertySource,@ImportResource,@Bean注解

    @PropertySource注解是将配置文件中 的值赋值给POJO 项目结构如下 一.创建一个Person.Java文件: import org.springframework.boot.conte ...

  3. SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端

    笔者的JSON如下: { "code": 10001, "message": "成功", "nextUrl": null ...

  4. 吴裕雄--天生自然 JAVASCRIPT开发学习:函数

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 201771010123汪慧和《面向对象程序设计Java》第十二周实验总结

    一.理论部分 1.在Java提供的GUI构建工具中可以分为组件和容器两类. 2.在Java中的组件有:按钮.标签.复选框.单选按钮.选择框.列表框.文本框.滚动条.画布.菜单. 3.在Java中的容器 ...

  6. SAP HANA学习笔记

    SAP HANA:High-Performance Analytic ApplianceSAP HANA XSC:Extended Application Services Classic(SAP推出 ...

  7. POJ 1745:Divisibility 枚举某一状态的DP

    Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11001   Accepted: 3933 Des ...

  8. Codeforces Round #599 (Div. 2) Tile Painting

    题意:就是给你一个n,然后如果  n mod | i - j | == 0  并且 | i - j |>1 的话,那么i 和 j 就是同一种颜色,问你最大有多少种颜色? 思路: 比赛的时候,看到 ...

  9. 主席树的妙用——Just h-index

    题目传送门:https://ac.nowcoder.com/acm/contest/1107/C 题意:给出一个区间,求最大的 h ,使得区间内至少有 h 个数 大于等于 h. 思路:1.需要区间有序 ...

  10. UVM实战[二]

    本期将讲解UVM环境构成和启动方式.主要参考资料为 http://bbs.eetop.cn/thread-320165-1-1.html http://rockeric.com/ 环境构成 进行仿真验 ...