Spark

一.coalesce

  1.简介

    coalesce常用来合并分区,第二个参数是合并分区时是否产生shuffle。true为产生shuffle,false为不产生shuffle。默认是false不产生shuffle。如果coalesce设置的分区数比原来的分区数还大的话若设置为false则不起作用。如果设置为true则效果等价于repartition。即repartition(numPartitions) = coalesce(numPartitions)。

  2.测试数据

    val array = Array("spark,scala,6", "hadoop,java,12", "tensorflow,python,8", "solr,java,16", "hbase,java,11")

  3.代码           

    /**
    * coalesce算子,常用于减少分区
     */
    val befParNum = rdd.getNumPartitions
    rdd = rdd.coalesce(1, false) // true为产生shuffle
    val coalParNum = rdd.getNumPartitions
    /**
     * repartition与之类型,一般增大分区数
     */
    rdd = rdd.repartition(3)
    val reParNum = rdd.getNumPartitions
    println("初始分区数:" + befParNum + ",coalesce分区后:" + coalParNum + ",repartition分区后:" + reParNum)

  4.结果

    初始分区数:2,coalesce分区后:1,repartition分区后:3

二.zip,zipWithIndex

  1.简介

    zip将两个RDD中的元素变成一个KV格式的RDD,两个RDD的每个分区元素个数必须相同。zipWithIndex该函数将RDD中的元素和这个元素在RDD中的索引下标【从0开始】组合成【K,V】键值对。

  2.测试数据

   val zip_array_left = Array(1,2,5,6,7,5,3,1)
   val zip_array_left_2 = Array(1,2,5,6,7,8,9,0)
   val zip_array_right = Array("spark", "scala", "hive", "hbase", "python", "hive", "hbase", "hbase")

  3.代码

   /**
   * zip
    */
   //to rdd
   val zip_left = sc.parallelize(zip_array_left)
   val zip_left_2 = sc.parallelize(zip_array_left_2)
   val zip_right = sc.parallelize(zip_array_right)    //zip
   val zip = zip_left.zip(zip_right)
   zip.foreach(println)
   println("------------------")    val zip_2 = zip_left_2.zip(zip_right)
   /**
    * zipWithIndex
  */
   val zip_index = zip.zipWithIndex()
   zip_index.foreach(println)

  4.结果

    (1,spark)
    (2,scala)
    (5,hive)
    (6,hbase)
    (7,python)
    (5,hive)
    (3,hbase)
    (1,hbase)
    ------------------
    ((1,spark),0)
    ((7,python),4)
    ((2,scala),1)
    ((5,hive),2)
    ((5,hive),5)
    ((6,hbase),3)
    ((3,hbase),6)
    ((1,hbase),7)

三.countByKey,countByValue

  1.简介

    countByKey作用在K,V格式的RDD之上,统计相同key的个数。countByValue作用在K,V格式的RDD之上,统计相同value的个数。

  2.测试数据

    同上

  3.代码

   /**
   * countByKey
   */
   val zip_key = zip.countByKey()
   zip_key.foreach(println)
   println("------------------")
   /**
   * countByValue
   */
   val zip_value = zip.countByValue()
   zip_value.foreach(println)

  4.结果 

    (5,2)
    (1,2)
    (6,1)
    (2,1)
    (7,1)
    (3,1)
    ------------------
    ((7,python),1)
    ((1,spark),1)
    ((2,scala),1)
    ((1,hbase),1)
    ((3,hbase),1)
    ((6,hbase),1)
    ((5,hive),2)

四.cogroup

  1.简介

    cogroup 对两个内部数据结构为元组(仅有两个元素的元组)的数据进行匹配,把匹配上的value值保存到一个元组中。

  2.测试数据

    同上

  3.代码  

   zip.cogroup(zip_2).foreach(println)

  4.结果

    (0,(CompactBuffer(),CompactBuffer(hbase)))
    (1,(CompactBuffer(spark, hbase),CompactBuffer(spark)))
    (7,(CompactBuffer(python),CompactBuffer(python)))
    (3,(CompactBuffer(hbase),CompactBuffer()))
    (6,(CompactBuffer(hbase),CompactBuffer(hbase)))
    (9,(CompactBuffer(),CompactBuffer(hbase)))
    (8,(CompactBuffer(),CompactBuffer(hive)))
    (5,(CompactBuffer(hive, hive),CompactBuffer(hive)))
    (2,(CompactBuffer(scala),CompactBuffer(scala))) 

五.flatten

  1.简介

    把多层集合数据展开成一个集合。

  2.测试数据

   val sourceDate = Array("zhen@zhen01/2018-09-04_18;57;02_SOURCE",
   "zhen@zhen02/2018-09-05_11;37;11_SOURCE","zhen@zhen03/2018-09-06_11;37;11_TEST")
   val resultDate = Array("zhen@zhen01/2018-09-04_18;57","zhen@zhen02/2018-09-05_11;37",
    "zhen@zhen03/2018-09-06_11;37")

  3.代码

   val seq = Seq(sourceDate, resultDate)
   seq.flatten.foreach(println)

  4.结果

    zhen@zhen01/2018-09-04_18;57;02_SOURCE
    zhen@zhen02/2018-09-05_11;37;11_SOURCE
    zhen@zhen03/2018-09-06_11;37;11_TEST
    zhen@zhen01/2018-09-04_18;57
    zhen@zhen02/2018-09-05_11;37
    zhen@zhen03/2018-09-06_11;37

Spark算子代码实践的更多相关文章

  1. UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现

      UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现   测试数据 java代码 package com.hzf.spark.study; import ...

  2. UserView--第一种方式set去重,基于Spark算子的java代码实现

    UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...

  3. Spark—RDD编程常用转换算子代码实例

    Spark-RDD编程常用转换算子代码实例 Spark rdd 常用 Transformation 实例: 1.def map[U: ClassTag](f: T => U): RDD[U]  ...

  4. 【Spark算子】:reduceByKey、groupByKey和combineByKey

    在spark中,reduceByKey.groupByKey和combineByKey这三种算子用的较多,结合使用过程中的体会简单总结: 我的代码实践:https://github.com/wwcom ...

  5. 我的Spark SQL单元测试实践

    最近加入一个Spark项目,作为临时的开发人员协助进行开发工作.该项目中不存在测试的概念,开发人员按需求进行编码工作后,直接向生产系统部署,再由需求的提出者在生产系统检验程序运行结果的正确性.在这种原 ...

  6. Spark算子---实战应用

    Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...

  7. ReactiveCocoa代码实践之-更多思考

    三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACOb ...

  8. ReactiveCocoa代码实践之-RAC网络请求重构

    前言 RAC相比以往的开发模式主要有以下优点:提供了统一的消息传递机制:提供了多种奇妙且高效的信号操作方法:配合MVVM设计模式和RAC宏绑定减少多端依赖. RAC的理论知识非常深厚,包含有FRP,高 ...

  9. (转)Spark 算子系列文章

    http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...

随机推荐

  1. [疑难杂症]__当你的Cortana搜索无法使用,显示纯白界面(ps:已解决).

    前言 这个问题是在前不久解决关于我电脑点击屏幕上方快捷方式不久后出现的问题,之前并没有出现过这样的错误,但因为使用到的情况比较少,就一直没有去解决,但在一点时间后,发现没有Cortana搜索栏还是十分 ...

  2. Python快速学习10: 循环的对象及设计 (生活的规律)

    前言 系列文章:[传送门] 生活逐渐规律,按时睡觉.今天写博客,明天补时间看会书.慢慢的时间很珍惜 我很喜欢! 时钟就像个循环体,我们将它融入生活. 正文 循环对象的并不是随着Python的诞生就存在 ...

  3. linux 命令 — cut

    cut 以列的方式格式化输出 依赖定界符 cut -f field_list filename 以默认定界符(tab,制表符)分割文件的列,输出指定的列field_list,field_list由列号 ...

  4. 如何在优雅地Spring 中实现消息的发送和消费

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  5. 【Apache Kafka】Kafka学习笔记

    0x00 基本信息 1.Kafka架构图 2.环境信息 服务器IP:xx.xx.xx.xx 操作系统:CentOS7.2_x64 Kafka版本:kafka_2.12-1.1.0 Zookeeper版 ...

  6. Linux下的java虚拟机性能监控与故障处理命令

    java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1.jstack 该命令用于生成当前时刻虚拟机的线程快 ...

  7. 应用负载均衡之LVS(三):ipvsadm命令

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. mac os下vscode快捷键

    全局 Command + Shift + P / F1 显示命令面板 Command + P 快速打开 Command + Shift + N 打开新窗口 Command + W 关闭窗口 基本 Co ...

  9. 关于Newtonsoft.Json,LINQ to JSON的一个小demo

    nuget获取Newtonsoft.Json github地址:Newtonsoft.Json public static void Test1() { /* 文本格式如下 代码实现目的: 1.VR ...

  10. 【转载】ASP.NET MVC设置允许跨域访问

    默认情况下,浏览器端发送Ajax请求一般被禁止跨域访问,如A域名网站访问B域名网站的请求会被终止,在ASP.NET MVC项目中,我们可以配置相应的设置项,允许网站的接口跨域访问,主要需要设置Acce ...