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表达式... ...
随机推荐
- docker中如何制作自己的基础镜像
一.本地镜像 举个例子:现在把自己的开发环境打包,取名为centos6-base.tar,然后在docker中,以centos6-base.tar作为基准镜像. 1.创建自己的镜像,放置于/root目 ...
- Standard Error of Mean(s.e.m.)
· 来源:http://www.dxy.cn/bbs/thread/6492633#6492633 6楼: “据我所知,SD( standard deviation )反应的是观测值的变异性,其表示平 ...
- POJ 1743 Musical Theme
感觉最近好混乱......各种OJ都刷一点,感觉不太好......尤其是这种英文题 这道题一开始还没有看懂.听了ljh大犇的解释后终于明白了.下面我为英语和我一样的人翻译一下题面: 输入n个数.求最长 ...
- Unity 使用快速教程
Unity是微软在CodePlex上的一个开源项目,可用于依赖注入.控制反转,类似Spring,下面是使用示例: 1.先来定义几个接口.类 namespace UnityTest { public i ...
- Android酷炫实用的开源框架(UI框架)
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...
- Alpha版本发布说明
软件发布的同时,在团队博客上写一个发布说明 ▪ 列出这一版本的新功能 ▪ 这一版本修复的缺陷 ▪ 对运行环境的要求 ▪ 安装方法 ▪ 描述系统已知的问题和限制 ...
- 【前端也要学点算法】快速排序的JavaScript实现
作为算法目录下的第一篇博文,快速排序那是再合适不过了.作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然. 排序算法有10种左右(或许更多), ...
- StackExchange.Redis--纯干货喂饱你
Redis和StackExchange.Redis redis有多个数据库1.redis 中的每一个数据库,都由一个 redisDb 的结构存储.其中,redisDb.id 存储着 redis 数据库 ...
- vNext之旅(1):从概念和基础开始
ASP.NET vNext or .NET vNext? vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为ASP.NET只是 ...
- iostat命令详解
iostat iostat用于输出CPU和磁盘I/O相关的统计信息. 命令格式: iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ devic ...