Spark 编程基础
1. 初始化Spark
import org.apache.spark.{SparkContext, SparkConf} val conf=new SparkConf().setAppName("RDD1").setMaster("local")
val sc=new SparkContext(conf)
2. 创建RDD的方法
内存:Parallelize 或者 makeRDD
外部文件:textFile
//1. both Parallelize and makeRDD could create RDD from In-Memory
val distData=sc.parallelize(data) // parallelize
val distData1=sc.makeRDD(data) // makeRDD //2 textFile could create RDD from files
val distFile=sc.textFile("E:/Java_WS/ScalaDemo/data/wc.txt")
3. 保存Spark结果
RDD可以使用 saveAsTextFile()保存下来;
非RDD,可以借助 Parallelize/makeRDD转化为RDD,再保存下来
myRDD.saveTextFile("Path/test.txt") val precision=new Array[String](100)
sc.parallelize(precision).saveAsTextFile("E:/Spark/models/precision.txt")
4. 键值对
下面两者等价:
myRDD. map (s=> (s,1))
myRDD. map (_,1)
reduceByKey 和sortByKey、groupByKey
distFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
distFile.flatMap(_.split(" ")).map(s=>(s,1)).sortByKey().collect().foreach(println)
distFile.flatMap(_.split(" ")).map(s=>(s,1)).groupByKey().foreach(println)
1)返回key 以及 每个key的个数 (key, cnt)
2)返回 (key,value) 排序后的
3)返回(key, (value1,value2...))
5. RDD 持久化
persist() 或 cache()
unpersist() 可以删除缓存RDD
6. 广播变量和累加器
- 通过sc.broadcast(v) 和 sc.accumulator(初始值,comments)定义
- 通过value访问其值。
- 广播变量不能修改了
- 累加器只能通过add 或者 +=修改
//SparkContext.broadcast(v) is a broadcast variable, could replace v in any place of the cluster
val broadcastVar=sc.broadcast(Array(1,2,3))
println(broadcastVar.value(0),broadcastVar.value(1),broadcastVar.value(2)) val accum=sc.accumulator(0,"My Accumulator")
sc.parallelize(Array(1,2,3,4)).foreach(x=>accum+=x)
println(accum.value)
7. UDF 和UDAF
8. 提交spark任务
例子:spark-submit (详细参考)
./bin/spark-submit \
--master yarn-cluster \
--num-executors 100 \
--executor-memory 6G \
--executor-cores 4 \
--driver-memory 1G \
--conf spark.default.parallelism=1000 \
--conf spark.storage.memoryFraction=0.5 \
--conf spark.shuffle.memoryFraction=0.3 \
--class YourClass
YourJar
JarParameter1
JarParameter2
num-executors
参数说明:用于设置Spark作业总共要用多少个Executor进程来执行。如果不设置默认会使用很少,影响作业的效率。
- executor-memory
参数说明:用于设置每个Executor进程的内存。一般来说设置4G~8G较为合适。
- executor-cores
参数说明:该参数用于设置每个Executor进程的CPU core数量,决定task的执行效率。一般2~4个。
- driver-momory
参数说明:该参数用于设置Driver进程的内存。通常不需要设置,或者设置为1G即可。
spark.default.parallelism
参数说明:该参数用于设置每个stage的默认task数量。需要设置,默认的话会根据HDFS的blocks数设置,偏少。
建议设置为num-executors * executor-cores的2~3倍较为合适
spark.storage.memoryFraction
参数说明:该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6
spark.shuffle.memoryFraction
参数说明:该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2
Spark 编程基础的更多相关文章
- Spark编程基础_RDD初级编程
摘要:Spark编程基础_RDD初级编程 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素 ...
- Spark编程基础_RDD编程
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据流模型的特 ...
- 2.3 Scala面向对象编程基础
一.类 1.类的定义 Unit表示什么都不返回 方法体最后一句的值,就是方法的返回值. 2.类成员的可见性 3.方法的定义方式 定义方法的时候加圆括号,调用时可以加圆括号c.getValue()也可以 ...
- Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark编程模型 1.1 术语定义 l应用程序(Application): 基于Spar ...
- Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 . 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语 ...
- Spark中文指南(入门篇)-Spark编程模型(一)
前言 本章将对Spark做一个简单的介绍,更多教程请参考:Spark教程 本章知识点概括 Apache Spark简介 Spark的四种运行模式 Spark基于Standlone的运行流程 Spark ...
- Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
- Spark编程模型
主要参考: Spark官方文档:http://spark.apache.org/docs/latest/programming-guide.html 炼数成金PPT:02Spark编程模型和解析 本文 ...
- Scala编程基础
Scala与Java的关系... 4 安装Scala. 4 Scala解释器的使用... 4 声明变量... 5 数据类型与操作符... 5 函数调用与apply()函数... 5 if表达式... ...
随机推荐
- Python的高级特性6:使用__slots__真的能省很多内存
在伯乐在线上看到了这篇文章,用Python的 __slots__ 节省9G内存,于是想测试下,对单个类,用__slots__节省内存效果会不会明显. 看完这个例子后,我们也会明白__slots__是用 ...
- 几种.NET平台数据持久化框架介绍
原文连接:http://yuxnet.blog.163.com/blog/static/164863495201131532223362/ 在.NET平台下,关于数据持久层框架非常多,本文主要对如下几 ...
- AngularJS中的缓存
欢迎大家指导与讨论 : ) 缓存篇 一个缓存就是一个组件,它可以透明地储存数据,以便以后可以更快地服务于请求.多次重复地获取资源可能会导致数据重复,消耗时间.因此缓存适用于变化性不大的一些数据,缓存能 ...
- 关于onbeforeunload的一些想法
页面在关闭前会有onbeforeUnload事件,来询问用户是否要关闭这个页面OR选项卡 浏览器的F5刷新为按下F5----onbeforeUnload----onunload----onload; ...
- NOI2018准备 Day11
今天7点半到9点我都不知道自己在干啥, 一共A了3道题,2道钻石,1道大师. 下午调一道线段树3个小时没调出来,一个单调栈2小时没搞出来...... 学了个算法:求极大子矩阵. 昨天定的目标是学指针, ...
- Android -- Adapter
体系 public interface Adapter----0层(表示继承体系中的层次) public interface ExpandableListAdapter---(无所谓层次因为没有其他 ...
- 产品列表页分类筛选、排序的算法实现(PHP)
一.简单的单条件查询 工作都是从简单的开始,先从最简单的单表查询开始,这个一般用在首页以及一些比较独立的页面,只需要查找几个符合条件的产品展示出来即可,可以使用分页或者不使用分页.下面这个是产品控制器 ...
- jQuery经典学习笔记
1.层次选择器: $("div> span") 获取div下的span元素 $(".one + div") 获取class为one的下一个div 2)过滤 ...
- 【MVVMLight小记】一.快速搭建一个基于MVVMLight的silverlight小程序
写了篇MVVM小记http://www.cnblogs.com/whosedream/p/mvvmnote1.html,说好要写点MVVMLight的东西,所以接着写,以便和大家共勉. 我假设你已经有 ...
- variable-precision SWAR算法介绍
BITCOUNT命令是统计一个位数组中非0进制位的数量,数学上称作:”Hanmming Weight“ 目前效率最好的为variable-precision SWAR算法,可以常数时间内计算出多个字节 ...