spark 学习(二) RDD及共享变量
声明:本文基于spark的programming guide,并融合自己的相关理解整理而成
概述
- HDFS,HBase 或者其它不论什么可以提供Hadoop输入格式的数据源;
- 驱动程序中已存在的Scala集合;
- 其它的RDD的转换
- broadcast variables, 被用于持久化变量在每一个node的内存中;
- accumulators, 这个变量仅仅可以被累加,
RDD操作
val conf = new SparkConf().setAppName("BasicRDDApp").setMaster("local[4]")
//spark://host:port
val sc = new SparkContext(conf)
/**
* parallelized collections
* 将scala的集合数据,并行化成为能够并行计算的分布式数据集
*/
val data = 1 to 1000 toArray
val distData = sc.parallelize(data,10)
//后面的数字是表示将集合切分成多少个块 ,一般是一个CPU 2-4块,通常spark能够自己主动帮你切分
val sum = distData.reduce((a, b) => a+b )
//在reduce的时候才開始真正的运行,driver将任务分布到各个机器上,然后每一个机器单独运行,将计算的结果返回到driver程序
println("sum " + sum)
/**
* 读取外部的数据源
* 1.Hadoop支持的数据源 ,比如HDFS,Cassandra,HBase ,Amazon S3
* ##假设文件地址是本地地址的话,那么他应该在集群的每一个节点上都能够被訪问(即:每一个节点上都应该有相同的文件)
* ##textFile的第二个參数控制文件被分割的大小默觉得64MB ,能够设置更大的可是不能设置更小的
*/
val distFile = sc.textFile("file:///usr/local/spark/README.md")
//接下来就能够进行相关的操作了
distFile.persist()//持久化
val len = distFile.map(s => 1).reduce((a, b) => a+b)
println(len)
val words = distFile.flatMap(l => l.split(" ")).map(w => (w,1)).reduceByKey((a,b) => a+b)
//w => (v1+v2+v3+...)
//map => 1->1 , flatMap => 1 -> 0..n
print(words.count())
words foreach println
val twords = distFile.flatMap(l => l.split(" ")).map(w => (w,1)).groupByKey()
//分组 w => (v1, v2, v3 ...)
twords foreach println
//.map(w => (w,1)).foreach(w => w._1);
RDD的持久化
- 使用方法: 使用persist()或者cache()方法,当中cache()方法默认持久化到内存,persist能够自己选择持久化的层次,在shuffle操作中,spark会自己主动保存中间计算结果,比如reduceBykey
- 作用: RDD的持久化会将会使得每一个节点保存对应的计算部分,以便再次使用该数据集时能够直接使用,加快计算速度
- 怎样选择持久化层次: 假设RDDs 在MEMORY_ONLY下表现良好的话,就选这个层次,这样CPU效率最高
其次MEMORY_ONLY_SER ,其它情况http://spark.apache.org/docs/latest/programming-guide.html
共享变量
val broadcastVar = sc.broadcast("string test")//broadcast variable is readonly
val v = broadcastVar.value
println(v)
val accum = sc.accumulator(0, "My Accumulator")//value and name
sc.parallelize(1 to 1000000).foreach(x => accum+= 1)
println(accum.name + ":" + accum.value)
spark 学习(二) RDD及共享变量的更多相关文章
- Spark学习之RDD编程(2)
Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...
- Spark学习之RDD编程总结
Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...
- Spark学习之RDD
RDD概述 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合 ...
- Spark学习笔记——RDD编程
1.RDD——弹性分布式数据集(Resilient Distributed Dataset) RDD是一个分布式的元素集合,在Spark中,对数据的操作就是创建RDD.转换已有的RDD和调用RDD操作 ...
- Spark Standalone Mode 多机启动 -- 分布式计算系统spark学习(二)(更新一键启动slavers)
捣鼓了一下,先来个手动挡吧.自动挡要设置ssh无密码登陆啥的,后面开搞. 一.手动多台机链接master 手动链接master其实上篇已经用过. 这里有两台机器: 10.60.215.41 启动mas ...
- spark学习(10)-RDD的介绍和常用算子
RDD(弹性分布式数据集,里面并不存储真正要计算的数据,你对RDD的操作,他会在Driver端转换成Task,下发到Executor计算分散在多台集群上的数据) RDD是一个代理,你对代理进行操作,他 ...
- Spark学习之RDD的理解
转自:http://www.infoq.com/cn/articles/spark-core-rdd/ 感谢张逸老师的无私分享 RDD,全称为Resilient Distributed Dataset ...
- spark学习(RDD案例实战)
练习0(并行化创建RDD) 先启动spark-shell 通过并行化生成rdd scala> val rdd1 = sc.parallelize(List(63,45,89,23,144,777 ...
- Spark 学习(二)
继续学习spark 认真查看了一下${SPARK_HOME}/bin/pyspark 的脚本,原来开启spark 的python 交互挺简单的. 主要操作 export PYTHONPATH=${SP ...
随机推荐
- win7 64位搭建scrapy(转)
win7 64位系统依赖的scrapy文件链接:http://pan.baidu.com/s/1mgJS7BM 一个很好的python 64位包下载页面:http://www.lfd.uci.edu/ ...
- ExtJS遮罩层Ext.loadMask
一.可以直接应用在元素上,如: var loadMarsk = new Ext.LoadMask(target, { msg:'正在处理数据,请稍候......', removeMask:true / ...
- comgrid获取多选值
var val = $('#cc').combobox('getValues');
- 提高软件质量实践——Facebook 篇
提高软件质量实践——Facebook 篇 Facebook 从 2004 年的哈佛校园的学生项目在短短的 7~8 年的时间中快速增长为拥有 10 亿用户的世界上最大的社交网络,又一次见证了互联网创业成 ...
- 利用StringUtils工具类进行String为空的判断
利用工具类进行String类型数据的非空判断,让自己的项目代码变得更加的简洁明了. 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 St ...
- mac下python2.x和python3.x的安装方法和升级方法/卸载
一.首先问个问题,我们为什么要升级python2.x或者python3.x的版本? 一个是低版本会有些bug:或者功能问题,或者安全问题等,另外高版本会引进一些新的功能,也会废弃一些老的功能. 可以通 ...
- 如何安装pip、升级pip包。mac下安装包的路径
参考:https://pip.pypa.io/en/stable/installing/ 1.wget -c https://bootstrap.pypa.io/get-pip.py 2.pytho ...
- 如何在android模拟器中导入搜狗输入法?
1.下载输入法程序,如:sogouinput_android_1.6_sweb.apk 2.然后cmd进入sdk的tools(有的是platform-tools)目录,输入adb install C: ...
- mssql Sqlver 修改标识列方法
摘自: http://www.cnblogs.com/badboy2008/articles/1145465.html MSSQL Server修改标识列方法 ----允许对系统表进行更新exec ...
- 解决ARC下performselector-may-cause-a-leak-because-its-selector-is-unknown 警告
在ARC下使用 [theTarget performSelector:theTarget withObject:Nil]; 会出现警告:performselector-may-cause-a-leak ...