一.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. [RN] React Native 自定义 底部 弹出 选择框 实现

    React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...

  2. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $A$ 为 $n$ 阶实对称阵, 证明: $A$ 有 $n$ 个不同的特征值当且仅当对 $A$ 的任一特征值 $\lambda_0$ 及对应的特征向量 $\alpha$, 矩 ...

  3. mysql 包含查找

    #从表iot_company选择,company_name字段包含10091015的项SELECT id FROM iot_company WHERE company_name LIKE " ...

  4. http 默认端口

    80是http协议的默认端口,是在输入网站的时候其实浏览器(非IE)已经帮你输入协议了,所以你输入http://baidu.com,其实是访问http://baidu.com:80.而8080,一般用 ...

  5. 2018-2019-20175205实验四《Android程序设计》实验报告

    目录 2018-2019-20175205实验四<Android程序设计>实验报告 实验要求 教材学习 第二十五章 活动 第二十六章 UI组件 第二十七章 布局 实验步骤 任务一 任务二 ...

  6. 收藏:C语言中字符串常量到底存在哪了?

    来源:https://www.cnblogs.com/jaysir/p/5041799.html 常量存储总结局部变量.静态局部变量.全局变量.全局静态变量.字符串常量以及动态申请的内存区 1.局部变 ...

  7. 《Linux就该这么学》自学笔记_ch21_使用Git分布式版本控制系统

    <Linux就该这么学>自学笔记_ch21_使用Git分布式版本控制系统 文章主要内容: 分布式版本控制系统 使用Git服务程序 提交数据 移除数据 移动数据 历史记录 还原数据 管理标签 ...

  8. cad.net 依照旧样条曲线数据生成一条新样条曲线的代码段. spline生成

    Spline spl = entity as Spline; //拿到旧的spline图元... //样条曲线生成条件 var controlPoints = new Point3dCollectio ...

  9. sql优化(原理,方法,特点,实例)

    整理的有点多,做好心理准备...... 1.资源优化理解: 不同设备,io不同.每种设备都有两个指标:延时(响应时间):表示硬件的突发处理能力:带宽(吞吐量):代表硬件持续处理能力. 每种硬件主要的工 ...

  10. adb和fastboot的使用

    1.前言 随着Android系统的普及,ADB(Android Debug Bridge)逐渐成了Android设备调试的必不可少的一种重要工具,该工具可以完成多种功能,例如跟踪系统日志,上传或下载文 ...