package com.bynear.spark_Streaming;
import com.google.common.base.Optional;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaDStream;
import org.apache.spark.streaming.api.java.JavaPairDStream;
import org.apache.spark.streaming.api.java.JavaReceiverInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import scala.Tuple2;
import java.util.Arrays;
import java.util.List;
/**
* 2018/5/11
* 14:38
* 基于updateStageByKey算子实现缓存的实时wordCount程序
*/
public class UpdateStateByKeyWordCount {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("updateStageByKey").setMaster("local[2]");
JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(5));
/**1、如果要使用updateStageByKey算子,就必须设置一个checkpoint目录,开启checkpoint机制
* 这样的话才能把每个key对应的stage除了在内存中有,在checkpoint中也存在一份
* 因为你要长期保存一份key的stage的话,那么SparkStreaming是要求必须用checkpoint的,以便于在内存数据丢失的时候,
* 可以从checkpoint中恢复
* 开启checkpoint机制,很简单,只要调用jssc的checkpoint()方法,设置一个hdfs目录即可
*/
jssc.checkpoint("hdfs://Spark01:9000/wordcount_checkpoint");
/**然后先实现基础的wordcount逻辑
*/
JavaReceiverInputDStream<String> lines = jssc.socketTextStream("localhost", 9999);
JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String line) throws Exception {
return Arrays.asList(line.split("#"));
}
});
JavaPairDStream<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, 1);
}
});
/**
* 到了这里,就不一样了,之前的话,是不是直接就是pairs.reduceByKey
然后,就可以得到每个时间段的batch对应的RDD,计算出来的单词计数
然后,可以打印出那个时间段的单词计数
但是,有个问题,你如果要统计每个单词的全局的计数呢?
就是说,统计出来,从程序启动开始,到现在为止,一个单词出现的次数,那么就之前的方式就不好实现
就必须基于redis这种缓存,或者是mysql这种db,来实现累加
但是,我们的updateStateByKey,就可以实现直接通过Spark维护一份每个单词的全局的统计次数
*/
// JavaPairDStream<String, Integer> wordcount = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {
// @Override
// public Integer call(Integer num1, Integer num2) throws Exception {
// return num1 + num2;
// }
// });
// wordcount.print();
JavaPairDStream<String, Integer> wordcount = pairs.updateStateByKey(
/**这里的Optional,相当于Scala中的样例类,就是Option,可以这么理解,
* 它代表了一个值的存在状态,可能存在,也可能不存在
*/
new Function2<List<Integer>, Optional<Integer>, Optional<Integer>>() {
@Override
/**这里两个参数,实际上,对于每个单词,每次batch计算的时候,都会调用这个函数
* 第一个参数,values,相当于是这个batch中,这个key的新的值,可能是多个。
* 比如说一个 hello,可能有两个1,(hello,1)(hello,1),那么传入的是(1,1)
* 第二个参数,指的是这个key之前的状态,stage,其中的泛型是你自己指定的
*/
public Optional<Integer> call(List<Integer> values, Optional<Integer> state) throws Exception {
// 首先定义一个全局的单词计数
Integer newValue = 0;
// 其次,判断,state是否存在,如果不存在,说明是一个key第一次出现
// 如果存在,说明这个key之前已经统计过全局的次数了
if (state.isPresent()) {
newValue = state.get();
}
// 接着,将本次新出现的值,都累加到newValue上去,就是一个key目前的全局的统计
// 次数
for (Integer value : values) {
newValue += value;
}
return Optional.of(newValue);
}
});
// 到这里为止,相当于是,每个batch过来是,计算到pairs DStream,就会执行全局的updateStateByKey
// 算子,updateStateByKey返回的JavaPairDStream,其实就代表了每个key的全局的计数
// 打印出来
wordcount.print();
jssc.start();
jssc.awaitTermination();
jssc.stop();
}
}
相关推荐
SparkStreaming+Kafka 实现基于缓存的实时wordcount程序
转载请务必注明原创地址为:https://dongkelun.com/2018/06/14/updateStateBykeyWordCount/ 前言 本文利用SparkStreaming和Kafka实现基于缓存的实时wordcount程序,什么意思呢,因为一般的SparkStreaming的wordcount程序比如官网上的,只能统计最新时间间隔内的每个单词的数量,而不能将历史的累加起来,本...
Spark Streaming状态管理函数updateStateByKey和mapWithState
updateStateByKey可以在指定的批次间隔内返回之前的全部历史数据,包括新增的,改变的和没有改变的。由于updateStateByKey在使用的时候一定要做checkpoint,当数据量过大的时候,checkpoint会占据庞大的数据量,会影响性能,效率不高。如果不输入新的数据,会一直展示之前的结果查看checkpoint文件夹下,发现有很多类似于checkpoint-1542090065000的状态文件这些checkpoint文件都是小文件,对hdfs的压力很大,怎么解决呢?下文会讲。...
SparkStreaming_updateStateByKey状态计算
目录 一、理论依据 二、代码测试wordCount 1、代码 2、测试数据 3、结果展示 一、理论依据 1、在流式计算中通常会有状态计算的需求,即当前计算结果不仅依赖于目前收到数据还需要之前结果进行合并计算的场景,由于sparkstreaming的mini-batch机制,必须将之前的状态结果存储在RDD中并在下一次batch计算时将其取出进行合并,这就是updateStateByKey方法的用处。 2、updateStateByKey操作,可以让我们为每个key维护一份state,并持续不断的更新该state。 (1)、首先,要定义一个state,可以是任意的数据类型; (2)、其次,要定义
MTK 驱动部分双分区升级原理
在8.0之后MTK平台将tee lk preloder 等分区设置为双分区,升级的时候会将两个分区都进行升级,我们对这一部分做一个简单的分析和了解 一、升级包语句 ota_from_target_files def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_file): target_info =...
汽车工程师必看:从CAN到Ethernet,6种车载通信协议全解析(附应用场景对比)
本文全面解析了从CAN到Ethernet的6种车载通信协议,包括CAN、LIN、MOST、FlexRay等,并对比了它们的应用场景和技术特点。文章详细介绍了各协议的演进历程、技术优势及在现代汽车中的混合网络架构设计,为汽车工程师提供了实用的协议选型指南和未来通信技术发展趋势。
Qlib+backtrader:2014.1.1-2023.9.20最新回测结果,可以实盘吗?
今年以来,在研究了qlib和backtrader的基础上,把二者结合起来进行了一个策略研究。简单说就是用qlib在200只股票的股票池中进行滚动训练与预测(walk forward),总体数据范围是2005到2023年,以20日间隔滚动训练和预测,最终得到2014.1.1-2023.9.20共10年测试期的收益率预测结果。将预测结果代入backtrader进行回测,得到如下回测结果。
Android recovery界面添加内部储存升级
修改内容: 1. diff --git a/bootable/recovery/device.h b/bootable/recovery/device.h index 19e4bec..a719aa3 100644 --- a/bootable/recovery/device.h +++ b/bootable/recovery/device.h @@ -81,7 +81,7 @@ cl...
Linux中断子系统(二)—— 通用框架处理
1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...
11.updateStateByKey以及基于缓存的实时wordcount程序
updateStateByKey updateStateByKey操作,可以让我们为每个key维护一份state,并持续不断的更新该state。 1、首先,要定义一个state,可以是任意的数据类型; 2、其次,要定义state更新函数——指定一个函数如何使用之前的state和新值来更新state。 对于每个batch,Spark都会为每个之前已经存在的key去应用一次state更新函数,
3A之自动对焦(AF)算法:从Tenegrad到拉普拉斯的清晰度评价实战
本文深入解析自动对焦(AF)算法的核心——清晰度评价函数,通过实战对比Tenegrad、方差、能量梯度、Brenner和拉普拉斯五大经典算法的原理、代码实现与性能。文章详细阐述了各函数在计算速度、抗噪性和单峰性上的优劣,并提供了从仿真测试到硬件部署的优化策略,帮助开发者根据实际场景选择最合适的AF算法。
YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!
在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。
SparkStreaming版本的wordcount(updatestateByKey)保存在mysql
package sparkstreamday01.SparkStream import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}import org.apache.log4j.{Level, Logger}import org.apache.spark.SparkConfimport org.apache....
台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)
*完整源码地址**:[https://github.com/billiards/pcol-core](https://github.com/billiards/pcol-core)(包含详细文档与示例)通过这个项目,我们不仅创建了一个游戏,更构建了一个**可扩展的物理引擎框架**,为网页端复杂物理模拟开辟了新的可能性。**在线体验**:[https://pcol.billiards](https://pcol.billiards)(支持移动端触控操作)clone.velocity.x *= -0.92;
Spark之---UpdateStateByKey算子操作
1.说明 SparkStreaming的一般是7天24小时不停息的运行,而在运行的时候,中间会有很多的状态,而有些状态我们需要一些操作,比如累计,更新或者其他的操作。那么如何将这些独立的状态联系起来就成了一种迫切的需求。 2.介绍 UpdateStateByKey的主要功能: 1、为Spark Streaming中每一个Key维护一份state状态,state类型可以是任意类型的, 可以是一个自...
lammps原子组速度的计算方法
在lammps摩擦、冲击、压痕等模拟过程中,涉及到某个原子组的整体移动,如果要输出这个原子组的整体移动速度,可以使用vcm()函数。下面是一个具体的使用案例,金刚石球在盒子内移动,输出移动过程中金刚石球在x方向的质心速度。vcm()是lammps自带的一个函数,返回原子组质心在设定方向的速度。其中,ID为group-ID,dim为方向,可设置x、y或者z方向。大家好,我是小马老师。
【教程4>第8章>第44节】本章整体思维导图与学习总结
本教程系列提供FPGA/MATLAB/Simulink学习资源,包含《MATLAB入门100例》、《FPGA入门100例》、《Simulink入门60例》等基础教程,以及《FPGA/MATLAB/Simulink联合开发》进阶教程和《人工智能基础应用研究》专题,适合不同层次的学习者系统掌握相关技术。
DStream算子updateStateByKey实现全局统计计数
updateStateByKey操作,可以让每个key维护一份state,并持续不断的更新该state。 1、首先,要定义一个state,可以是任意的数据类型; 2、其次,要定义state更新函数——指定一个函数如何使用之前的state和新值来更新state。 对于每个batch,Spark都会为每个之前已经存在的key去应用一次state更新函数,无论这个key在batch中是否有
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
首先简单解释一下什么是state(状态)管理?我们以wordcount为例。每个batchInterval会计算当前batch的单词计数,那如果需要计算从流开始到目前为止的单词出现的次数,该如计算呢?SparkStreaming提供了两种方法:updateStateByKey和mapWithState 。mapWithState 是1.6版本新增功能,目前属于实验阶段。mapWithState
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
Spark DStream的mapWithStates和updateStateByKey使用
mapWithStates使用demo 直接上核心代码: 读kafka消息, String topics = &amp;amp;amp;amp;quot;topic-test&amp;amp;amp;amp;quot;; Set&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; topicsSet = new HashSet&amp;amp;a
UpdateStateByKey操作
官网原话: updateStateByKey操作允许您在使用新信息不断更新时保持任意状态。要使用它,您必须执行两个步骤。 定义状态 - 状态可以是任意数据类型。 定义状态更新功能 - 使用函数指定如何使用先前状态和输入流中的新值更新状态。 在每个批处理中,Spark都会对所有现有key应用状态更新功能,无论它们是否在批处理中都有新数据。如果更新函数返回,None则将删除key-valu。 ...
UpdateStateByKey算子
具体用法参考官网UpdateStateByKey Operation updateStateByKey操作允许您在使用新信息不断更新时保持任意状态。 要使用它,您必须执行两个步骤。 定义状态 - 这个状态可以是任意的数据类型 定义状态update函数 - 用这个函数指定如何使用先前状态和新输入流里的新值更新状态 对于有状态操作,要不断的把当前和历史的时间切片的RDD累加计算,随着时间的流失,计算...
updateStateByKey函数详解及worldcount例子
updateStateByKey操作允许您在使用新的信息持续更新时保持任意状态。1、定义状态 - 状态可以是任意数据类型。 2、定义状态更新功能 - 使用函数指定如何使用上一个状态更新状态,并从输入流中指定新值。 如何使用该函数,spark文档写的很模糊,网上资料也不够详尽,自己翻阅源码总结一下,并给一个完整的例子updateStateBykey函数有6种重载函数:1、只传入一个更新函数,最简单的...
[spark streaming] 状态管理 updateStateByKey&mapWithState
前言SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这时就需要sparkStreaming来维护一些状态,目前有两种方案updateStateByKey&mapWithState,mapWithState是spark1.6新加入的保存状态的方案,官方声称有10倍性能提升。updateStateByK
大数据中各种WordCount实现
总结一下大数据中的各种WordCount的实现,虽然逻辑代码不是很难,但是WordCount绝对是大数据思想和编程的基础。这里可能不全,以后还有实例会往里面补充,也欢迎各位大大沟通交流~
Linux中安装nc(netcat)常见问题
Linux中安装nc(netcat)常见问题 Spark Streaming编写wordCount程序时,在Linux集群中需要安装nc,来对程序中使用到的端口进行开放。 在安装nc的时候,常出现的问题有以下几点! 1、不建议使用 yum staill nc 进行安装,yum安装的为最先版本的netcat 出现的报错为:[root@Spark02 hadoop]# nc -lk 9999
基于ZooKeeper实现HA高可用性以及自动主备切换
默认情况下,standalone cluster manager对于worker节点的失败是具有容错性的(迄今为止,Spark自身而言对于丢失部分计算工作是有容错性的,它会将丢失的计算工作迁移到其他worker节点上执行)。然而,调度器是依托于master进程来做出调度决策的,这就会造成单点故障:如果master挂掉了,就没法提交新的应用程序了。为了解决这个问题,spark提供了两种高可用性方案,...
2046



被折叠的 条评论
为什么被折叠?



