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优化整理
随机推荐
- c#对象深复制demo
public class Person : ICloneable { public string Name; object ICloneable.Clone() { return this.Clone ...
- Java程序员需要掌握的技能
转自:https://www.cnblogs.com/harry335/p/5924505.html
- requests方法中content和text区别
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...
- 解决PL/SQL使用无法导出dmp
解决PL/SQL使用无法导出dmp 1.配置plsql Export Executable:D:\app\product\11.2.0\dbhome_1\BIN\exp.exe 2.配置环境变量ORA ...
- Centos下安装LoadRunner负载机
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAd0AAADfCAIAAAA84J6GAAAgAElEQVR4nJzb93cbR6In+uK/8v6Fd8
- 存货?交期?产能不足?APS系统帮你完成计划排程
信息化时代的今天,技术的进步.全球化的竞争与市场环境迅速变化,使得制造业企业的经营环境变得日益复杂. 集中表现在产品生命周期和交货期的缩短,与此同时顾客的需求也变得多样化和个性化.生产方式也从大批量生 ...
- 安装gcc-c++报错解决办法
问题 每次安装依赖包gcc-c++的时候,经常会遇到包如下错误 Error: Package: libstdc++-devel--.el7_4..x86_64 (ultra-centos-7.4- ...
- 景点API支持查询携程旅游门票景点详情
门票景点详情,景点api支持查询携程旅游门票景点详情. 接口名称:景点api 接口平台:开放api 接口地址:http://api2.juheapi.com/xiecheng/senicspot/ti ...
- Linux服务之DNS介绍
DNS-------Domain Name System域名系统 介绍:DNS就是把域名和IP地址联系在一起的服务,有了DNS服务器,你就不用输入IP地址来访问一个网站,可以通过输入网址访问. ...
- nginx实现tcp的反向代理
nginx不仅可以实现http的反向代理,同时也支持TCP的反向代理以SSH为例1.编译的时候需要加入--with-stream这个参数,以加载ngx_stream_core_module这个模块2 ...