一.combineByKey算子简介

  功能:实现分组自定义求和及计数。

  特点:用于处理(key,value)类型的数据。

  实现步骤:

    1.对要处理的数据进行初始化,以及一些转化操作

    2.检测key是否是首次处理,首次处理则添加,否则则进行分区内合并【根据自定义逻辑】

    3.分组合并,返回结果

二.combineByKey算子代码实战

 package big.data.analyse.scala.arithmetic

 import org.apache.spark.sql.SparkSession
/**
* Created by zhen on 2019/9/7.
*/
object CombineByKey {
def main (args: Array[String]) {
val spark = SparkSession.builder().appName("CombineByKey").master("local[2]").getOrCreate()
val sc = spark.sparkContext
sc.setLogLevel("error") val initialScores = Array((("hadoop", "R"), 1), (("hadoop", "java"), 1),
(("spark", "scala"), 1), (("spark", "R"), 1), (("spark", "java"), 1)) val d1 = sc.parallelize(initialScores) val result = d1.map(x => (x._1._1, (x._1._2, x._2))).combineByKey(
(v : (String, Int)) => (v : (String, Int)), // 初始化操作,当key首次出现时初始化以及执行一些转化操作
(c : (String, Int), v : (String, Int)) => (c._1 + "," + v._1, c._2 + v._2), // 分区内合并,非首次出现时进行合并
(c1 : (String,Int),c2 : (String,Int)) => (c1._1 + "," + c2._1, c1._2 + c2._2)) // 分组合并
.collect() result.foreach(println)
}
}

三.combineByKey算子执行结果

  

四.transform算子简介

  在spark streaming中使用,用于实现把一个DStream转化为另一个DStream。

五.transform算子代码实现

 package big.data.analyse.streaming

 import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext} /**
* Created by zhen on 2019/09/21.
*/
object StreamingSocket { def functionToCreateContext():StreamingContext = {
val conf = new SparkConf().setMaster("local[2]").setAppName("StreaingTest")
val ssc = new StreamingContext(conf, Seconds(10))
val lines = ssc.socketTextStream("192.168.245.137", 9999) val words = lines.flatMap(_.split(" "))
val pairs = words.map(word=>(word,1)) /**
* 过滤内容
*/
val filter = ssc.sparkContext.parallelize(List("money","god","oh","very")).map(key => (key,true)) val result = pairs.transform(rdd => { // transform:把一个DStream转化为另一个SDtream
val leftRDD = rdd.leftOuterJoin(filter)
val word = leftRDD.filter( tuple =>{
val y = tuple._2
if(y._2.isEmpty){
true
}else{
false
}
})
word.map(tuple =>(tuple._1,1))
}).reduceByKey(_+_) result.foreachRDD(rdd => {
if(!rdd.isEmpty()){
rdd.foreach(println)
}
})
ssc.checkpoint("D:\\checkpoint")
ssc
}
Logger.getLogger("org").setLevel(Level.WARN) // 设置日志级别
def main(args: Array[String]) {
val ssc = StreamingContext.getOrCreate("D:\\checkpoint", functionToCreateContext _) ssc.start()
ssc.awaitTermination()
ssc.stop()
}
}

六.transform算子执行结果

  输入:

      

  输出:

    

  备注:若在执行流计算时报:Some blocks could not be recovered as they were not found in memory. To prevent such data loss, enable Write Ahead Log (see programming guide for more details.,可以清空checkpoint目录下对应的数据【当前执行生成的数据】,可以解决这个问题。

Spark高级函数应用【combineByKey、transform】的更多相关文章

  1. Spark核心RDD:combineByKey函数详解

    https://blog.csdn.net/jiangpeng59/article/details/52538254 为什么单独讲解combineByKey? 因为combineByKey是Spark ...

  2. spark aggregate函数详解

    aggregate算是spark中比较常用的一个函数,理解起来会比较费劲一些,现在通过几个详细的例子带大家来着重理解一下aggregate的用法. 1.先看看aggregate的函数签名在spark的 ...

  3. Spark高级数据分析——纽约出租车轨迹的空间和时间数据分析

    Spark高级数据分析--纽约出租车轨迹的空间和时间数据分析 一.地理空间分析: 二.pom.xml 原文地址:https://www.jianshu.com/p/eb6f3e0c09b5 作者:II ...

  4. javascript高级函数

    高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...

  5. js 高级函数 之示例

    js 高级函数作用域安全构造函数 function Person(name, age)    {        this.name = name;        this.age = age;     ...

  6. 浅谈JS中的高级函数

    在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅如此,还能被一个函数返回!可以说,在JS中,函数无处不在,无所不能,堪比孙 ...

  7. php一些高级函数方法

    PHP高级函数 1.call_user_func (http://php.net/manual/zh/function.call-user-func.php) 2.get_class (http:// ...

  8. Spark 用户自定义函数 Java 示例

    Spark UDF Java 示例 在这篇文章中提到了用Spark做用户昵称文本聚类分析,聚类需要选定K个中心点,然后迭代计算其他样本点到中心点的距离.由于中文文字分词之后(n-gram)再加上昵称允 ...

  9. Python函数式编程(二):常见高级函数

    一个函数的参数中有函数作为参数,这个函数就为高级函数. 下面学习几个常见高级函数. ---------------------------------------------------------- ...

随机推荐

  1. jdk,jre,jvm,openJdk

    1,jdk install: java_home: point to the installation directory of JDK, which is used by some java dev ...

  2. 【cf比赛记录】Educational Codeforces Round 77 (Rated for Div. 2)

    比赛传送门 这场题目前三题看得挺舒服的,没有臃肿的题目,对于我这种英语渣渣就非常友好,但因为太急了,wa了两发A后才意识到用模拟(可以删了,博主真的是个菜鸟),结果导致心态大崩 ---- 而且也跟最近 ...

  3. redis哨兵模式实现主从故障切换

    环境设定base2 172.25.78.12 masterbase3 172.25.78.13 slavebase4 172.25.78.14 slave1.配置一主二从环境在base2上[root@ ...

  4. git 学习网站

    GitBook  :https://git-scm.com/book/zh/v2 Git 教程 廖雪峰 :https://www.liaoxuefeng.com/wiki/89604348802960 ...

  5. IOCP陷阱

    1. AcceptEx 10061 客户端循环连接,没有发送数据,一定次数后,连接失败,WSAGetLastError的结果是10061.并且后续无法再次连接. 这是因为其中的一个参数,详细用法参考I ...

  6. 基于32位Windows2003的数据库服务器优化,启用AWE,优化SQL Server

    最近几天,笔者所在的单位中的一台WEB服务器由于负载过大出现了问题,当同时在线的用户达到一定规模(2000-3000)时,频繁出现页面响应迟缓.超时等问题.服务器采用的操作系统是Windows Ser ...

  7. 本地项目git初始化并提交远程仓库

    1.先在远程仓库(如github)创建项目,为了避免错误,不要初始化 README, license, 或者gitignore文件 . 2.打开Terminal终端 3.切换到你的本地项目目录 4.初 ...

  8. Node节点如何加入K8S集群

    k8s集群中,有时候发现有些节点状态为 NotReady,如何修复为Ready状态呢? [root@k8s-master~]# kubectl get nodes NAME STATUS ROLES ...

  9. 基于ZYNQ的uart传输任意长度的数据

    1.参考 UG585 网络笔记 参考:ZYNQ进阶之路14–PS端uart串口接收不定长数据 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验之串口写数据到DDR3中 3.实验目的 基于 ...

  10. fio压测

    目录 fio工具介绍 参数介绍 测试举例 模板如下: 四路服务器测试的小tips fio工具介绍 用于测试存储设备IO性能. 当存储设备中存在用户数据时,严谨使用fio进行写操作!!! 参数介绍 rw ...