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. Angular 后台报错记录

    异常信息:ERROR TypeError: Cannot read property 'xxxx' of undefined 异常原因:"xxx"属性未定义,引发异常的原因可能是H ...

  2. soap调用Jar包冲突,SOAPMessageContext

    ================================ ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ soap调用 ...

  3. 【MySQL基础打卡(一)】查询语句项目作业

    文章目录 1.查找email表中重复的电子邮箱 1.1 创建email数据表 1.2 找出重复Email 2.查找大国家 2.1 创建数据表 2.2 查找大国家 对于安装MySQL比较恐惧,所以想在虚 ...

  4. Nginx负载均衡(转发)

    http://www.cnblogs.com/jalja/p/6117881.html 一.反向代理 正向代理: 客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就 ...

  5. 201909-1 小明种苹果 Java

    思路: 保存掉落的苹果总数,和树是第几棵即可 import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  6. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring实例化Bean的三种方法

    在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象.在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化.静态工厂方式实例化和实例工厂方式实例化. 构造器实例化 ...

  7. 前端框架vue学习笔记

    占坑

  8. Ansible常见错误解析

    背景 由于工作中经常用到ansible,所以整理了常用的ansible错误及原因分析,方便自己也方便别人参考. 1.shell 模块常见错误 1.1 使用shell遇到"msg": ...

  9. POJ 1006:Biorhythms 中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 121194   Accepted: 38157 Des ...

  10. VEH&VCH

    本文99.9%的代码及内容作者:mengwuji 来自:http://www.mengwuji.net/forum.php?mod=viewthread&tid=1371 VEH:向量化异常处 ...