关于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. net输出错误日志

    在使用net开发webapi的时候,有时候程序异常了,外面只能看到一个错误:an error occur 怎么才能将具体的 错误堆栈信息输出来呢? 1.在startup.cs文件中添加如下代码就可以将 ...

  2. iOS11里判断Safari浏览器是无痕模式还是正常模式?

    var isPrivate = false; try { window.openDatabase(null, null, null, null); } catch (_) { isPrivate = ...

  3. 开发技术-IPython介绍

    开发技术-IPython介绍 IPython是交互式的Python命令行,希望大家喜欢. 最近在回顾之前学习的内容,并且继续学习新的知识.这种自身的感觉,很不一般,有太多的感想产生.希望自己可以坚持将 ...

  4. 设计模式之(九)桥接模式(Bridge)

    桥接模式是怎么诞生的呢?来看一个场景. 一个软件企业开发一套系统,要兼容所有的不同类型硬件和和各种操作系统.不同种类硬件主要是 电脑.平板电脑.手机.各种操作系统是苹果系统.windows 系统.Li ...

  5. JavaScript之二十三种设计模式

    23种JavaScript设计模式   原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500 ...

  6. vue项目进入mui.js报错 typeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode .....

    在做项目时,引用mui报错如下 看样子就是不支持严格模式吧. 解决方法是在根目录 下的.babelrc文件里面添加过滤掉.不用严格模式

  7. How to use VideoToolbox to decompress H.264 video stream

    来源:http://stackoverflow.com/questions/29525000/how-to-use-videotoolbox-to-decompress-h-264-video-str ...

  8. 旅游景点信息API接口大全

    1.分享数据:“http://www.shareapi.cn/docs/api/id/127”,免费,次数1000次 返回JSON示例 { "SceneryID":10224,/* ...

  9. python安装第三方库--换镜像源

    python安装第三方库--换镜像源 1. 更换anaconda源 清华大学镜像:清华大学镜像 anaconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/an ...

  10. Java精通并发-Condition详解及相比于传统线程并发模式的改进

    在上一次https://www.cnblogs.com/webor2006/p/11792954.html对于Lock的具体实现类ReentrantLock用了一个示例对它进行了一个简单的了解,而它其 ...