spark 基本操作整理
关于spark 的详细操作请参照spark官网
scala 版本:2.11.8
1.添加spark maven依赖,如需访问hdfs,则添加hdfs依赖
groupId = org.apache.spark
artifactId = spark-core_2.
version = 2.3. groupId = org.apache.hadoop
artifactId = hadoop-client
version = <your-hdfs-version>
2.sparkcontext 的创建
val conf = new SparkConf().setAppName("example").setMaster("local[*]")
val sc = new SparkContext(conf) sc.stop()
sc 使用结束,记得关闭
3.创建rdd
1)parallelized 方法
val words = sc.parallelize(Array("dong","jason","puma","large"),2)
2)读取外部数据
val rdd = sc.textFile("path_to_file(local or hdfs)")
一个放重要的概念,partitions,spark在逻辑上回对数据进行分区,每个分区会安排一个task来处理,textfile 如果读取的时hdfs,则默认partitions 是 文件的block数,
一般情况下为资源中每个cpu分配 2-4 个task为宜
4. SparkContext.wholeTextFiles
val rdd = sc.wholeTextFiles("./")
rdd.take().foreach(println) -----------------------------------
(file:/C:/notos/code/sailertest/aa.csv,name,age
jason,
dong,)
其输出结果时一个元组,(filepath,filecontent)
5.读取 hadoop sequencefFile
val seqRdd = sc.sequenceFile[String,Int]("seq")
seqRdd.take().foreach(println) (jason,)
(dong,)
sequenceFile[K,V]中的K,V 必须指定,且2要与sequencefile的类型匹配
6.向方法传递函数
object Func{
def concat(tp:(String,Int)):String={
tp._1 + " " + tp._2
}
} val seqRdd = sc.sequenceFile[String,Int]("seq").map(Func.concat)
上述例子是把方法定义在单利对象中,与之相对,也可以把方法定义在类中,请看下面的例子
class MyClass{
val field = " "
def concat(rdd:RDD[(String,Int)]) :RDD[String] ={
val field_ = field
rdd.map(tp=> tp._1 + field_ + tp._2)
}
}
这里在concat方法中我没没有直接 使用 Myclass 的 成员 field ,因为直接使用field ((tp=> tp._1 + field + tp._2) 相当于是 (tp=> tp._1 + this.field + tp._2))
这样会把整个类再引用一遍
7. rdd key-value 操作
val wordcount = sc.textFile("aa.txt")
.flatMap(_.split("\\s+",-))
.map(word=>(word,))
.reduceByKey((x,y)=> x+y)
wordcount.collect()
.foreach(println)
(Liu,)
(worth,)
(,)
(after,)
(profit,)
8.计算平均数
val list = List(, , , , )
val rdd = sc.parallelize(list)
val sum = rdd.reduce(_ + _)
val num = rdd.map(x => ).reduce(_ + _)
val sn = rdd.aggregate((, ))((u, v) => (u._1 + v, u._2 + ),
(u1, u2) => (u1._1 + u2._1, u1._2 + u2._2)
)
val res = sn._1.toDouble/sn._2
println(sum.toDouble/num)
println(res)
9.计算每个年级的平均成绩
val list = List(
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", ),
("", )
)
val avgScores = sc.parallelize(list)
.combineByKey(
(score: Int) => (score, ),
(u: (Int, Int), v: Int) => (u._1 + v, u._2 + ),
(u: (Int, Int), u2: (Int, Int)) => (u._1 + u2._1, u._2 + u2._2)
).mapValues(x => x._1.toDouble / x._2)
avgScores.collect().foreach(println)
(,94.0)
(,94.0)
10. 广播变量
val broadcastVar = sc.broadcast(Array(,,))
broadcastVar.value.foreach(println)
广播变量会被发送到每台机器,而不是每个task
11.累加器
val rdd = sc.parallelize(List(,,,))
val acc = sc.longAccumulator("myacc")
rdd.map(x=>acc.add(x)).collect()
println()
println(acc.value)
spark 基本操作整理的更多相关文章
- Spark 配置整理
Spark 的配置有很多,这里一方面总结一下官方文档中的内容,一方面将网上查到的资料中用到的针对特定问题的配置整理一下. 先看一下官网的配置:http://spark.apache.org/docs/ ...
- spark 基本操作(二)
1.dataframe 基本操作 def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName ...
- spark 入门整理
1.第一个概念:RDD RDD(Resilient DistributedDatasets) ,弹性分布式数据集,是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记 ...
- [bigdata] Spark RDD整理
1. RDD是什么RDD:Spark的核心概念是RDD (resilient distributed dataset),指的是一个只读的,可分区的弹性分布式数据集,这个数据集的全部或部分可以缓存在内存 ...
- spark 基本操作
读取文件的数据 使用的数据:https://codeload.github.com/xsankar/fdps-v3/zip/master 读取单个文件的数据 case class Employee(E ...
- Spark RDD整理
参考资料: Spark和RDD模型研究:http://itindex.net/detail/51871-spark-rdd-模型 理解Spark的核心RDD:http://www.infoq.com/ ...
- ceph基本操作整理
一.ceph基本操作: 启动osd.mon进程: start ceph-osd id=X start ceph-mon id=YYY 关闭osd.mon进程: stop ceph-osd id=X ...
- Mysql基本操作整理
1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...
- spark优化整理
随机推荐
- 在微博微信场景下学习Redis数据结构
Redis安装 下载地址:http://redis.io/download 安装步骤: 1.yum install gcc 2.wget http://download.redis.io/releas ...
- javascript中常用函数
1.js 获取文件后缀名 <script type="text/javascript"> var filename="www/data/index.php&q ...
- 英语lasurite青金石lasurite单词
lasurite青金石的蓝色,是希望的颜色. 医药功效:青金石可入药,是世界公认的.青金即青金石,是一种不透明或半透明的蓝色.蓝紫色或蓝绿色的准宝石,主要由天蓝石和方解石组成.青金石色是藏传佛教中药师 ...
- Windows上安装运行Spark
1.下载Scala: https://www.scala-lang.org/download/ ①注意:必须下载官方要求的JDK版本,并设置JAVA_HOME,否则后面将出现很多麻烦! ②Scala当 ...
- (原)堆叠hourglass网络
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/11486185.html 论文: https://arxiv.org/abs/1603.06937 官 ...
- Zabbix监控多个JVM进程
一.场景说明: 我们这边的环境用的是微服务,每个程序都是有单独的进程及单独的端口号,但用jps查询出来的结果有些还会有重名的情况,所以某些脚本不太适用本场景: 二.需求说明: 需使用Zabbix- ...
- MySQL 加锁和死锁解析
目录 产生死锁的必要条件 锁是加在那里的? 操作与加锁的对照关系 Insert Delete Update GAP锁 什么时候加next-key lock? Insert Intention Lock ...
- C#使用Xamarin开发移动应用 ---- 系列文章
C#使用Xamarin开发移动应用 C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练, ...
- 3.创建Manager类,演示对TestUser进行增删改查功能
接上一篇文章 创建NHibernateHelper帮助类,生成sessionFactory http://www.cnblogs.com/fzxiaoyi/p/8443587.html 创建个新的类M ...
- stm32定时器频率采样的方式
频率采样方法通常采样定时器的计数方法,在stm32中,输入捕捉模式,PWM输入模式,都是可以测试外部信号频率采样的.1.输入捕捉模式需要频繁的进中断,这个方式不太好的.如果一定要用,那么就软件上处理一 ...