spark
发布日期:2021-08-22 21:41:58 浏览次数:13 分类:技术文章

本文共 4425 字,大约阅读时间需要 14 分钟。

hot3.png

  spark

 

一、什么是spark,诞生于伯克利大学贝尔实验室

 

spark的四种运行模式

  • Local多用于测试
  • Standalone
  • Mesos(apache旗下的资源调度框架)
  • YARN最具有前景

 

RDD是基础     :Resilient Distributed Dataset          弹性分布式数据集  

  • 数据的一种瞬时状态

RDD的五大特性

  • A list of partitions  : 可以把数据放在多个分片上进行计算
  • A function for computing each split  : 每个split进行计算
  • A list of dependencies on other RDDs  :一般来说一个rdd要依赖于其他rdd
  • Optionally, a Partitionerfor key-value RDDs  : 
  • Optionally, a list of preferred locations to compute each split on  : 数据本地化计算,优先计算本地数据

 

算子:

transformations

  •  var data: RDD[String] = sc.textFile("G:\\user.txt")
  •     sc.parallelize(1 to 10 )

Action

 

map:对rdd中的元素操作

flatMap:对rdd中的结合中的元素操作

    var data: RDD[Array[Int]] = sc.parallelize(List(Array(1,2,4),Array(456,3,354),Array(322,42)))

    var data2: RDD[Int] = data.flatMap(x => x)

    val data3 = data.flatMap(x => {

      val a:Array[Int] = x

      a.map(_+2)

 

    })

 

    data2.foreach(println(_))

 

mapPartitions:去壳

  data.mapPartitions(part => part.filter(_.length>3)).flatMap(x=> x ).foreach(println(_))

 

第二集完

 

glom : 加壳

  var ss: RDD[Int] = sc.parallelize(1  to 10,3)

   var g: RDD[Array[Int]] =  ss.glom()

 

 

union  合并  同  ++

    var m = sc.parallelize(1 to 10 )

    var n = sc.parallelize(100 to 110 )

    m.union(n).foreach(println(_))

=

  (m ++ n).foreach(println(_))

 

cartesian  笛卡尔积

 var xx: RDD[(Int, Int)] =   m.cartesian(n)

   var b: Long = xx.count()

  m.cartesian(n).map(a =>{a._1 +"  "+a._2}).foreach(println(_))

 

sortByKey  和  sortBy

    m.cartesian(n).sortByKey(true,1).map(a =>{a._1 +"  "+a._2}).foreach(println(_))

    m.cartesian(n).sortBy(_._2,true,1).map(a =>{a._1 +"  "+a._2}).foreach(println(_))

 

filter

    var m = sc.parallelize(1 to 10 )

    m.filter(_>5).foreach(println(_))

 

distinct  去重

    var m: RDD[Int] = sc.parallelize(Array(1,1,2,3,5,66,66,67))

    m.distinct().foreach(println(_))

 

reduce :累加求和, reduceByKey 先分组,再累加求和

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

 println( m.reduce((x,y) =>x+y))

 

   var n = sc.parallelize( List((1,3),(1,4),(3,2),(4,2),(4,2)))

    n.reduceByKey((x,y) => x+y).foreach(println(_))

结果:

(4,4)

(1,7)

(3,2)

 

subtract  m 集合 - n集合

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,6,7,7))

    var n: RDD[Int] = sc.parallelize(Array(1,2,3,4))

    m.subtract(n).foreach(println(_))

 

sample  :取样,第一个参数是是否放回,第二个参数是取出来的概率

    sc.parallelize(1 to 10).sample(true,0.5,1).foreach(println(_))

takeSample:取样,取指定个数个

  sc.parallelize(1 to 100).takeSample(true,10,1).foreach(println(_))

saveAsTextFile:保存为文件

   var xx: RDD[Int] = sc.parallelize(1 to 100)

    xx.saveAsTextFile("G:/text.txt")

collect:转换为scala集合,action算子

   var xx: RDD[Int] = sc.parallelize(1 to 100)

    var sxx: Array[Int] =xx.collect()

lookup:对所有分区的数据进行扫描,将指定键值的数据拿到

   var n = sc.parallelize( List((1,3),(1,4),(3,2),(4,2),(4,2)))

    n.lookup(1).foreach(println(_))

结果:

3

4

top:取值最大的几个元素

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

    m.top(2).foreach(println(_))

take:从集合前面取几个元素,返回值为scala的集合类型

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

    m.take(2).foreach(println(_))

drop:scala中的方法,不是算子和take对立,丢去

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

    m.take(2).drop(1).foreach(println(_))

 

fold:先默认值自加,在累加

    var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

    println(m.fold(1)((x,y) => {x+y}))

获取系统时间

 var xx: Long =   System.currentTimeMillis()

 

持久化:Persist  Cache

使用缓存

var m: RDD[Int] = sc.parallelize(Array(1,2,3,4,5))

m.cache()
m.persist(StorageLevel.DISK_ONLY_2)
m.unpersist()  //在使用完数据后一定要使用该方法来释放内存

使用缓存级别涉及到的参数:

    private var _useDisk: Boolean,:使用硬盘  

    private var _useMemory: Boolean,:使用内存
    private var _useOffHeap: Boolean,:使用堆以外的
    private var _deserialized: Boolean,:不用序列化
    private var _replication: Int = 1        :副本数

  val NONE = new StorageLevel(false, false, false, false):完全不用缓存

  val DISK_ONLY = new StorageLevel(true, false, false, false):使用磁盘做缓存
  val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2):使用磁盘有两个副本
  val MEMORY_ONLY = new StorageLevel(false, true, false, true):使用内存,如果内存不够就放一部分,使用序列化
  val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2):同上,但是有两个副本
  val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false):使用内存缓存数据,使用序列化
  val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2):同上,有两个副本
  val MEMORY_AND_DISK = new StorageLevel(true, true, false, true):内存不够往磁盘放
  val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2):同上,有两个副本
  val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false):内存不过往磁盘放,序列化
  val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2):同上,有两个副本
  val OFF_HEAP = new StorageLevel(false, false, true, false):往tachyon(分布式内存文件系统)里放数据

 

java代码写spark程序  略

 

 

转载于:https://my.oschina.net/captainliu/blog/715877

转载地址:https://blog.csdn.net/weixin_33755847/article/details/92443606 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:网上的一篇spring security详解教程,觉得不错,转过来了
下一篇:oracle pctfree和pctused详解

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月11日 14时24分10秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

下载了XAMPP怎样打开MYSQL_xampp mysql安装启动 2019-04-21
pdo转mysql_mysql转mysqli或pdo 2019-04-21
mysql如果没有表就创建_mysql – 改变表是否存在或创建如果没有 2019-04-21
ireport连接mysql_ireport 4.5教程之数据源介绍 2019-04-21
mysql多维模型_数据仓库数据库设计方法---关系模型和多维模型比较分析 2019-04-21
局域网聊天程序 java MySQL_java 基于TCP/IP协议的局域网聊天小程序 2019-04-21
r glm 中的p值_假设检验中的P值 2019-04-21
mysql中sql语句结构_MySQL中使用sql语句获得表结构 2019-04-21
如何增加mysql主键约束_mysql修改表时怎么添加主键约束? 2019-04-21
java选择路径窗口_Java实现选择电脑路径的方法 2019-04-21
java 图像渐变_Java基础之在窗口中绘图——渐变填充(GradientApplet 1) 2019-04-21
冒泡排序面向对象java_所谓的面向对象实现的冒泡排序 2019-04-21
proto 客户端 JAVA_Kubernetes官方java客户端之五:proto基本操作 2019-04-21
java编写roguelike_RogueLike地牢生成算法Unity实现 2019-04-21
java ajax 修改数据库数据库数据库_AJAX 自学练习 无刷新提交并修改数据库数据并显... 2019-04-21
java并发编程指南博客_Java并发编程-synchronized指南 2019-04-21
java怎么中断阻塞状态_java并发编程()阻塞方法与中断方法 2019-04-21
java zlib 位运算_位运算入门:找出一个二进制数的最右端的第一个1;计算一个二进制数中1的个数;找出数组中唯一一个出现次数为奇数的数;找出数组中唯二两个出现次数为奇数的数... 2019-04-21
java lua热更新_lua热更新学习 2019-04-21
script执行php文件_php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法... 2019-04-21