关于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 基本操作整理的更多相关文章

  1. Spark 配置整理

    Spark 的配置有很多,这里一方面总结一下官方文档中的内容,一方面将网上查到的资料中用到的针对特定问题的配置整理一下. 先看一下官网的配置:http://spark.apache.org/docs/ ...

  2. spark 基本操作(二)

    1.dataframe 基本操作 def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName ...

  3. spark 入门整理

    1.第一个概念:RDD RDD(Resilient DistributedDatasets) ,弹性分布式数据集,是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记 ...

  4. [bigdata] Spark RDD整理

    1. RDD是什么RDD:Spark的核心概念是RDD (resilient distributed dataset),指的是一个只读的,可分区的弹性分布式数据集,这个数据集的全部或部分可以缓存在内存 ...

  5. spark 基本操作

    读取文件的数据 使用的数据:https://codeload.github.com/xsankar/fdps-v3/zip/master 读取单个文件的数据 case class Employee(E ...

  6. Spark RDD整理

    参考资料: Spark和RDD模型研究:http://itindex.net/detail/51871-spark-rdd-模型 理解Spark的核心RDD:http://www.infoq.com/ ...

  7. ceph基本操作整理

    一.ceph基本操作: 启动osd.mon进程: start ceph-osd id=X start ceph-mon id=YYY 关闭osd.mon进程: stop  ceph-osd id=X ...

  8. Mysql基本操作整理

    1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...

  9. spark优化整理

随机推荐

  1. sklearn聚类评价指标

    sklearn中的指标都在sklearn.metric包下,与聚类相关的指标都在sklearn.metric.cluster包下,聚类相关的指标分为两类:有监督指标和无监督指标,这两类指标分别在skl ...

  2. ecshop 中的$GLOBALS

    ec二次开发 或研究ec的一些网友 经常在论坛里提到 $GLOBALS['db']; $GLOBALS['ecs'];在那定义的等帖子. 下来就$GLOBALS我说一点:       想搞明白的朋友 ...

  3. SAP常见查询组合

    做SAP开发的,SELECT是必不可少的.新语法出了不少'新鲜'的语法,用法也是五花八门. 新语法有新语法的好处,老语法有老语法的优势. 新语法里把很多的逻辑处理,分组,排重,内表处理全都放到一些关键 ...

  4. 国内不fq安装K8S四: 安装过程中遇到的问题和解决方法

    目录 4 安装过程中遇到的问题和解决方法 4.1 常见问题 4.2 常用的操作命令 4.3 比较好的博客 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国 ...

  5. 利用mycat读写分离搭建wordpress博客网站

    实验环境 以下配置都是建立在mariadb主从没有问题的情况下: .三台主机:在三台机器/etc/hosts添加以下3条主机信息(mycat和wordpress在一台机器上面) mycat:192.1 ...

  6. 内核中dump_stack的实现原理(3) —— 内核函数printk的实现

      参考内核文档: Documentation/printk-formats.txt   在内核中使用dump_stack的时候可以看到如下用法: static inline void print_i ...

  7. C#中的函数(三)参数传递及返回值

    接前面二篇,继续开始新的研究 前面忘了说什么是主调函数与被调函数 主调函数:执行调用其它函数语句所在的函数 被调函数:被其它函数所调用的函数 简单说就是一个是发起调用者,另一个是被调用者 写个小例子说 ...

  8. NGUI里的sprite和label有白色的边框

    问题描述:NGUI里的sprite和label有白色的边框,而原图一切正常 如图: 解决方案: 给Sprite 边缘左右更增加1,这样拉伸的时候就忽略了左右1的位置,图片就不会显示白色边框了

  9. 09-cmake语法-add_dependencies()

    在编译器的命令行上,为当前路径以及下层路径的源文件加入一些define flag.这个命令可以用来引入任何flag,但是它的原意是用来引入预处理器的定义.那些以-D或/D开头的.看起来像预处理器定义的 ...

  10. LOJ#107. 维护全序集(FHQ Treap)

    题面 传送门 题解 板子,没啥好说的 //minamoto #include<bits/stdc++.h> #define R register #define inline __inli ...