文档章节

Spark算子学习(一)

静下来想想静静
 静下来想想静静
发布于 2017/03/19 20:43
字数 927
阅读 38
收藏 0

    2017.3.19。开始静下心来学习Spark,环境还没搭建好,但不妨碍我玩本地呀,是不是!

    工具:

    IDEA没了。

    最近喜欢上了画脑图,所以最后上脑图。

    1.map算子

        一一对应型,比如我将一个List传入map,map中可以通过匿名函数将这个list里的各项按照函数转换成一个新的RDD

    

    

def main(args: Array[String]): Unit = {
  //设定spark的配置信息。这里设定为在本地运行
  var conf = new SparkConf().setAppName("map算子").setMaster("local")
  //建立spark的上下文实例
  var sc = new SparkContext(conf)
  //新建一个数组
  val cao : Array[String] = Array("Hello","World")
  //将这个数组变成RDD,通过RDD的map算子将cao里面的每个值变成了 ***** 1
  sc.parallelize(cao).map(v => v + "\t1").foreach(i => println(i))

    2.filter算子

        对元素进行过滤。元素都要经过filter中定义的函数体来进行过滤,true留在RDD中

        

        

def main(args: Array[String]): Unit = {
  //啥都不想先建立spark链接
  var conf = new SparkConf().setAppName("我靠,我还是自己写名字吧").setMaster("local")
  var sc = new SparkContext(conf)
  var arr:Array[Int] = Array(1,2,3,4,5)
 sc.parallelize(arr).filter(v => v>2).foreach(i => println(i))

    3.faltMap算子

        同Map一样,但是map是一个元素对应一个输出元素,而flatMap则是可能会产出0个或多个成员

        

        

var conf = new SparkConf().setAppName("名字瞎写了").setMaster("local")
var sc = new SparkContext(conf)

var list:List[String] = List("Hello,World","HelloScala","Hello,Spark")
var arr2 = sc.parallelize(list).flatMap(f => f.split(",")).foreach(m => println(m))
var list1:List[Array[String]] = List(Array("A","B","C","D"),Array("E","F","G"))
var res = sc.parallelize(list1).flatMap(v => {

  for(i <- 0 until v.length){
   v(i) = v(i)+"\t1"
  }
 v
}).foreach(f => println(f))
结果是:
A 1
B 1
C 1
D 1
E 1
F 1
G 1

    4.mapPartitions算子
          同map类似,但是map针对的是RDD中的每个元素,而mapPartitions却是对RDD的一个分区进行参数是一个迭代器

            

            

每个分区得到一个迭代器,对迭代器操作就可以了。其实我个人觉得和map算子一样吧。下面代码
var conf = new SparkConf().setAppName("真不知道怎么取名字").setMaster("local")
var sc = new SparkContext(conf)

var list: List[String] = List("Hello", "Scala", "Hello", "Spark")
sc.parallelize(list).mapPartitions(f => {
  var arr = ArrayBuffer[String]()
  while(f.hasNext){
    arr.append(f.next()+"\t1")
  }
  arr.iterator
}).foreach(f => println(f))
而且感觉更加复杂了有没有啊。
 

    5.mapPartitionsWithIndex算子
         和mapPartitions差不多,只是多了一个参数,这个参数就是索引值

          

           

var conf = new SparkConf().setAppName("还是不知道怎么取名字").setMaster("local")
var sc = new SparkContext(conf)
var list = List("xx1","xx2","xx3","xx4","xx5","xx6","xx7","xx8","xx9")
sc.parallelize(list,3).mapPartitionsWithIndex((m,n) =>{
  var arr = ArrayBuffer[String]()
  while (n.hasNext){
   arr.append("分区索引为:"+m+"\t"+n.next)
 }
 arr.iterator
}).foreach(f => println(f))

以上代码解释解释,sc.parallelize(list,3)代表3个元素分成一个组,从0开始。之后跟的算子,参数就是两个所以定义m,n两个参数,m给索引,n为迭代器
结果是:
分区
索引为:0 xx1
分区索引为:0 xx2
分区索引为:0 xx3

分区索引为:1 xx4
分区索引为:1 xx5
分区索引为:1 xx6

分区索引为:2 xx7
分区索引为:2 xx8
分区索引为:2 xx9

    6.sample算子
     抽样算子,三个参数,第一个参数代表抽样元素是否返回重新抽样,true为返回,第二个为抽样比例,第三个随机数种子,这里就不举例了

    7.union算子
      合并两个RDD元素,元素类型必须一致,不去重

        

var conf = new SparkConf().setAppName("XX在看我,所以我要装逼")setMaster("local")
var sc = new SparkContext(conf)
var list1 = List("xx1")
var list2 = List("李x2")
//sc.parallelize(list1).union(sc.parallelize(list2)).foreach(f => println(f))
(sc.parallelize(list1)++sc.parallelize(list2)).foreach(f => println(f))

    8.intersection算子
      返回两个RDD的相同值,也就是说两个RDD的交集。

© 著作权归作者所有

静下来想想静静
粉丝 2
博文 14
码字总数 12348
作品 0
焦作
私信 提问
Spark--大数据的“电光石火”

Spark已正式申请加入Apache孵化器,从灵机一闪的实验室“电火花”成长为大数据技术平台中异军突起的新锐。本文主要讲述Spark的设计思想。Spark如其名,展现了大数据不常见的“电光石火”。具...

一枚Sir
2014/08/15
314
1
Spark 【数据挖掘平台介绍】 - Spark 1.1.0

一:Spark Spark已正式申请加入Apache孵化器,从灵机一闪的实验室“电火花”成长为大数据技术平台中异军突起的新锐。本文主要讲述Spark的设计思想。Spark如其名,展现了大数据不常见的“电光...

止静
2014/09/16
3K
0
Spark Core介绍以及架构

应用场景 Apache Spark 是加州大学伯克利分校的 AMP Labs 开发的开源分布式轻量级通用计算框架。由于 Spark 基于内存设计,使得它拥有比 Hadoop 更高的性能(极端情况下可以达到 100x),并且...

wsc449
2018/01/17
0
0
Spark比拼Flink:下一代大数据计算引擎之争,谁主沉浮?

AI 前线导读: 做大数据绝对躲不过的一个热门话题就是实时流计算,而提到实时流计算,就不得不提 Spark 和 Flink。Spark 从 2014 年左右开始迅速流行,刚推出时除了在某些场景比 Hadoop Map...

AI前线
2018/07/23
0
0
高性能Spark作业基础:你必须知道的调优原则及建议

在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操...

李雪蕤
2018/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
39分钟前
4
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部