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优化整理
随机推荐
- 25个特殊操作符(special operator)
1. CLHS (Common-Lisp-Hyper-Spec) http://www.lispworks.com/documentation/HyperSpec/Body/03_ababa.htm ...
- Bootstrap4后台导航栏制作
<!Doctype html> <html lang="zh-cn"> <head> <!-- Required meta tags -- ...
- python 排序 归并排序
算法思想 迭代法: 归并算法一共有两种思想,笼统的说,这两种思想的区别就在于一种不分割未排序的序列(直接将序列看为n个个数为1的子序列),这种称为---迭代法 直接从队头开始,两两合并为一个个数为2的 ...
- C++中的Point类与vector类的简单处理
首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等. 向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0): 第14行:由于Vector需要用到Point ...
- 在centos下安装rar解压.rar压缩包
CentOS本身不自带rar环境,因此对于rar文件无法直接解压,需要先配置rar环境. 首先需要确定自己的系统是64位还是32位的,通过这个命令: [root@localhost]# uname - ...
- Loadsh 常用方法总结以及在vue中使用Loadsh
Loadsh 常用方法总结以及在vue中使用Loadsh Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.处理复杂数组,对比等可以直接采用该库,也方便快捷. 官方网站 ...
- mysql 多条数据中,分组获取值最大的数据记录
摘要: 多条纪录中,几个字段相同,但是其中一个或者多个字段不同,则去该字段最大(这里只有一个不同) 源数据: 目的是移除:在同一天中只能存在一天数据,则取审核日期最大,数据库脚本如下: SELECT ...
- List转换数组 数组转换List
数组转List package listtoArray; import java.util.ArrayList;import java.util.Arrays;import java.util.Col ...
- MP构造器
官方文档:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper 实体包装器,用于处理 sql 拼接,排序,实体参数查询等! 补充说明: 使用的是数据 ...
- 【SSH错误】ssh_exchange_identification: read: Connection reset by peer
进行远程登录时,ssh root@xxxxxxxxx出现如下错误 ssh_exchange_identification: read: Connection reset by peer 解决方案:登录 ...