关于Spark RDD 的认识
一、基本认识
RDD 是Spark大数据计算引擎中,抽象的一种数据结构。
RDD(Resilient Distributed Dataset),中文意思是弹性分布式数据集,它是Spark中的基本抽象。在Spark源码中,有下面的注释:
RDD 有五个主要的属性:
A list of partitions (分区列表)
A function for computing each split (分区计算函数) 相同的计算逻辑应用在不同的分区中
A list of dependencies on other RDDs (多个RDD之间存在依赖关系)
Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned) (对键值对类型的数据进行分区)
Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file) (首选位置,计算数据的位置)
- 启动Yarn集群资源
- spark申请资源,创建调度节点和计算节点
- 根据需求,spark把计算逻辑,根据分区,划分成不同的任务
- 调度节点把任务根据计算节点的状态,发送到对应的计算节点上进行计算
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object Spark01RddCreate {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "C:\\Hadoop\\")
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark01rddmemory")
val sc = new SparkContext(sparkConf) // TODO: Spark 从内存中创建RDD
val list = List(1, 2, 3, 4)
val rdd1 = sc.parallelize(list)
val rdd2 = sc.makeRDD(list)
rdd1.collect().foreach(println)
rdd2.collect().foreach(println) // TODO: Spark 从外部文件中创建RDD
val sc_text: RDD[String] = sc.textFile("G:\\SNBRecommendSys\\recommender\\DataLoader\\src\\main\\input_data")
System.out.println("从外部文件中创建RDD:\n")
sc_text.collect().foreach(println) // TODO: Spark 从其他RDD创建RDD
val flatRDD = sc_text.flatMap(line => {
line.split(" ")
})
System.out.println("从其他RDD创建RDD:\n")
flatRDD.collect().foreach(println) sc.stop()
}
}
2、关于RDD并行度的理解
import org.apache.spark.{SparkConf, SparkContext} object Spark02RddParallelizeSet {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "C:\\Hadoop\\")
val spark = new SparkConf().setMaster("local[*]").setAppName("RddParallelizeSet")
val context = new SparkContext(spark) val list = List(1, 2, 3, 4, 5) // TODO: 从内存创建RDD,并且设置并行执行的任务数量
// numSlices: Int = defaultParallelism
val memoryRDD = context.makeRDD(list, 4)
memoryRDD.collect().foreach(println) // TODO: 结束
context.stop()
}
}
我们在一层层进入Spark源码,最终可以查看到关于RDD并行度的相关信息:
我们可以在这个实现方法里看到 scheduler.conf.getInt(参数一,参数二),参数一是spark配置文件里的一个配置项,参数二的意思是本地机器的cpu核数。调度程序是从spark的配置文件里读取了 spark.default.parallelism 这个配置。如果没有读取到这个配置的话,则并行度设置将会与本地机器的cpu核数一样。
现在回到我们自己写的程序里,在创建spark配置实例的时候,我们其实已经在设置要用多少个本地机器的核数了:
关于Spark RDD 的认识的更多相关文章
- Spark Rdd coalesce()方法和repartition()方法
在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...
- Spark RDD API详解(一) Map和Reduce
RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不同 ...
- Spark RDD aggregateByKey
aggregateByKey 这个RDD有点繁琐,整理一下使用示例,供参考 直接上代码 import org.apache.spark.rdd.RDD import org.apache.spark. ...
- Spark RDD解密
1. 基于数据集的处理: 从物理存储上加载数据,然后操作数据,然后写入数据到物理设备; 基于数据集的操作不适应的场景: 不适合于大量的迭代: 不适合交互式查询:每次查询都需要对磁盘进行交互. 基于数 ...
- Spark - RDD(弹性分布式数据集)
org.apache.spark.rddRDDabstract class RDD[T] extends Serializable with Logging A Resilient Distribut ...
- Spark RDD Operations(1)
以上是对应的RDD的各中操作,相对于MaoReduce只有map.reduce两种操作,Spark针对RDD的操作则比较多 ************************************** ...
- Spark RDD的依赖解读
在Spark中, RDD是有依赖关系的,这种依赖关系有两种类型 窄依赖(Narrow Dependency) 宽依赖(Wide Dependency) 以下图说明RDD的窄依赖和宽依赖 窄依赖 窄依赖 ...
- Spark RDD操作(1)
https://www.zybuluo.com/jewes/note/35032 RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RD ...
- Spark RDD概念学习系列之RDD的转换(十)
RDD的转换 Spark会根据用户提交的计算逻辑中的RDD的转换和动作来生成RDD之间的依赖关系,同时这个计算链也就生成了逻辑上的DAG.接下来以“Word Count”为例,详细描述这个DAG生成的 ...
- Spark RDD概念学习系列之RDD的checkpoint(九)
RDD的检查点 首先,要清楚.为什么spark要引入检查点机制?引入RDD的检查点? 答:如果缓存丢失了,则需要重新计算.如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容 ...
随机推荐
- Win7安装Python失败 提示Setup failed
一.安装报错 如图所示,双击Python安装包后进行安装显示Setup failed 安装失败: 二.错误排除 1.首先查看自己的计算机是否已经安装了 Win7 Service Pack 1大补丁,没 ...
- ‘100%’wuxiao
有时候设置控件的width:’100%‘无效, 群友解释, 因为父控件的大小要靠自空间撑起来,确定 ??????
- ES5---Proxy的理解的使用
定义:Proxy原意为“代理”,在这可以理解为代理/拦截器的意思.Proxy在一个目标对象前放置了一个拦截,凡是外界对该对象的访问,都必须通过这层拦截,所以Proxy可以对外界的访问进行过滤和改写. ...
- Redis服务之常用配置(二)
上一篇博客我们聊了下redis的INCLUDE.NETWORK.GENERAL配置段相关配置和说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/133831 ...
- 爬虫管理平台以及wordpress本地搭建
爬虫管理平台以及wordpress本地搭建 学习目标: 各爬虫管理平台了解 scrapydweb gerapy crawlab 各爬虫管理平台的本地搭建 Windows下的wordpress搭建 爬虫 ...
- PDOStatement::columnCount
PDOStatement::columnCount — 返回结果集中的列数.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 int PDOStateme ...
- 数据结构C语言实现----直接插入排序
直接插入排序(简单插入排序) 给定一个数字串:2 6 7 8 9 3 2 3 4 按从小到大的顺序排列输出 首先把第一个数字放到一个小组里:(2)6 7 8 9 3 2 3 4 让后从第二个数字开始往 ...
- JS时间和时间戳的转换
时间转为时间戳 timeToTimestamp(time){ let timestamp = Date.parse(time) return timestamp; } 时间戳转为本地时间 timest ...
- asp.net core 2.1的全局模型验证统一方案
网上的统一模型验证,有效到asp.net core 2.0 2.1的mvc还可以用 webapi嘛,想想就好,自己琢磨了一顿,才发现这东西应该这样玩 首先吧api上面的特性注释了 //[ApiCont ...
- [NLP]LSTM理解
简介 LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题.以下先从RNN介绍. 简说RNN RNN(Recurrent ...