Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Apache流窗口WordCount

我有下面的代码来计数来自socketTextStream的单词。累积字数和时间加窗字数都是必需的。该程序存在一个问题,即cumulateCounts总是与窗口计数相同。为何会出现这个问题?基于窗口计数计算累积计数的正确方法是什么?

代码语言:javascript
代码运行次数:0
复制
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
final HashMap<String, Integer> cumulateCounts = new HashMap<String, Integer>();

final DataStream<Tuple2<String, Integer>> counts = env
            .socketTextStream("localhost", 9999)
            .flatMap(new Splitter())
            .window(Time.of(5, TimeUnit.SECONDS))
            .groupBy(0).sum(1)
            .flatten();

counts.print();

counts.addSink(new SinkFunction<Tuple2<String, Integer>>() {
    @Override
    public void invoke(Tuple2<String, Integer> value) throws Exception {
        String word = value.f0;
        Integer delta_count = value.f1;
        Integer count = cumulateCounts.get(word);
        if (count == null)
            count = 0;
        count = count + delta_count;
        cumulateCounts.put(word, count);
        System.out.println("(" + word + "," + count.toString() + ")");
    }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 15:41:28

您应该首先分组,并在键控数据流上应用窗口(您的代码在Flink 0.9.1上工作,但是Flink 0.10.0中的新API对此非常严格):

代码语言:javascript
代码运行次数:0
复制
final DataStream<Tuple2<String, Integer>> counts = env
        .socketTextStream("localhost", 9999)
        .flatMap(new Splitter())
        .groupBy(0)
        .window(Time.of(5, TimeUnit.SECONDS)).sum(1)
        .flatten();

如果在无键数据流上应用一个窗口,那么在单个机器上只会有一个线程窗口操作符(即没有并行性)来在整个流上构建窗口(在Flink 0.9.1中,这个全局窗口可以被groupBy()拆分为子窗口--但是,在Flink 0.10.0中,这将不再起作用)。要计算单词,您需要为每个不同的键值构建一个窗口,即首先为每个键值(通过groupBy())获取一个子流,并在每个子流上应用一个窗口操作符(因此,您可以为每个子流创建一个自己的窗口操作符实例,允许并行执行)。

对于全局(累积)计数,可以简单地应用groupBy().sum()结构。首先,流被分成子流(每个键值一个).第二,计算流上的和。因为流是而不是窗口的,所以计算(累积)中的和以及每个传入元组的更新(更详细地说,和的初始结果值为零,每个元组的结果被更新为result += tuple.value)。每次调用sum之后,将发出新的当前结果。

在您的代码中,不应该使用特殊的接收器函数,但是应该这样做:

代码语言:javascript
代码运行次数:0
复制
counts.groupBy(0).sum(1).print();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33446247

复制
相关文章
Day7:R语言课程 (R语言进行数据可视化)
在本课中需要制作与每个样本中的平均表达量相关的多个图,还需要使用所有可用的metadata来适当地注释图表。
科研菌
2020/12/22
6K0
Day7:R语言课程 (R语言进行数据可视化)
R语言绘图之ggplot2包「建议收藏」
6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图。 R的基础包里面也有很多画图函数,例如plot();barplot();qqplot(); 但是还有大名鼎鼎的ggplot2包,用这个包的函数画出的图比较漂亮,而且使用灵活。
全栈程序员站长
2022/07/23
2.1K0
R语言绘图之ggplot2包「建议收藏」
(数据科学学习手札37)ggplot2基本绘图语法介绍
  ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架;ggplot2的作者是现任Rstudio首席科学家的Hadley Wickham,ggplot2基于Leland Wilkinson在Grammar of Graphics(图形的语法)中提出的理论,取首字母缩写再加上plot,于是得名ggplot,末尾的2是因为Hadley写包的一个习惯——对先前的版本不满意便写一个新版本的名称不变仅在末尾加上2,如reshape2等;
Feffery
2018/05/26
7K0
ggplot2--R语言宏基因组学统计分析(第四章)笔记
ggplot2可以用来创建优雅的图形,由于它的灵活,简洁和一致的接口,可以提供美丽、可直接用来发表的图形,吸引了许多用户,特别是科研领域的用户。ggplot2使用grid包来提供一系列的高水平的函数,并将其延伸为图形语法,即独立指定绘图组件,并将它们组合起来,以构建我们想要的任何图形显示。图形语法包含6个主要成分:data, transformations, element, scales, guide和 coordinate system。图层图形语法源于多层数据构建图形的想法。它定义了下表中的图形组分:data, aesthetic mappings, statistical transformations, geometric objects, position adjustment, scales, coordinate system 和 faceting(数据、几何映射、统计变换、几何对象、位置调整、比例、坐标和面)。数据、几何映射、统计变换、几何对象、位置调整形成一个图层,一个图可以有多个图层。
用户1075469
2021/07/05
5K0
【数据分析 R语言实战】学习笔记 第四章 数据的图形描述 (下)
ggplot2是R中用于绘图的高级程序包,它将绘图视为一种映射—数学空问到图形元索空间的映射,例如将不同的数值映射为不同的颜色或其他图形属性。ggplot2在画图时就是采用了类似photoshop的图层设计方式,允许用户一步步构建图形,并且便于图层的修改。
统计学家
2019/04/10
1.9K0
【数据分析 R语言实战】学习笔记 第四章 数据的图形描述 (下)
R语言可视化——地图与气泡图结合应用
今天跟大家分享如何在地图上进行散点图、气泡图绘制。 昨天跟大家介绍了ggplot函数进行地图绘制的原理,通过轮廓点和分组来定义每一个地区(国家边界),通过多边形填充来完成区域填色。 ggplot的图层叠加原理晕允许我们在坐标系统的叠加多个图层; 所以在地图上叠加散点、甚至气泡可以很容易的实现: 包的导入: library(maptools) library(ggplot2) library(plyr) 导入地理信息数据: china_map <- readShapePoly("c:/rstudy/bou2_
数据小磨坊
2018/04/11
3.8K0
R语言可视化——地图与气泡图结合应用
R语言绘图之ggplot2
1. ggplot2的安装:install.packages("ggplot2")。
一粒沙
2019/07/31
4.3K0
R语言之 ggplot 2 和其他图形
ggplot2 包提供了一套基于图层语法的绘图系统,它弥补了 R 基础绘图系统里的函数缺乏一致性的缺点,将 R 的绘图功能提升到了一个全新的境界。ggplot2 中各种数据可视化的基本原则完全一致,它将数学空间映射到图形元素空间。想象有一张空白的画布,在画布上我们需要定义可视化的数据(data),以及数据变量到图形属性的映射(mapping)。
timerring
2023/10/13
5100
R语言之 ggplot 2 和其他图形
R语言基础绘图教程——第2章:散点图
plot函数中,x和y分别表示所绘图形的横坐标和纵坐标;函数中的...为附加的参数。
DoubleHelix
2019/08/09
4.7K0
R语言基础绘图教程——第2章:散点图
三种可视化方法,手把手教你用R绘制地图网络图!
大数据文摘出品 编译:睡不着的iris、陈同学、YYY 不知道如何在地图上可视化网络图?下面这篇博客将使用R中的igraph、ggplot2或ggraph包来介绍三种在地图上可视化网络图的方法。在对地理位置以及位置的连接关系进行可视化时,还可以在图中展示一些属性。 当我们对节点(nodes)为地理位置的网络图进行可视化时,比较有效的做法是将这些节点绘制在地图上并画出它们之间的连接关系,因为这样我们可以直接看到网络图中节点的地理分布及其连接关系。 但这与传统的网络图是不同的。在传统的网络图中,节点的分布取决于
大数据文摘
2018/06/29
2.6K0
ggplot2轻松绘制误差线点图与箱线图
R语言数据分析指南
2023/08/18
4930
ggplot2轻松绘制误差线点图与箱线图
56-R可视化-5-ggplot2基石三部曲之基础二
几何对象的本质,也就是画面上的不同图层。当我们通过 ggplot(data=example) 后,便相当于设定了默认的ggplot2 设定的背景图层,接着依靠 +geom_point() , +geom_bar() 等等,便可以实现图层的添加。
北野茶缸子
2021/12/17
1.9K0
56-R可视化-5-ggplot2基石三部曲之基础二
高阶可视化绘图系统:ggplot2入门
ggplot2是《The Grammar of Graphics》/《图形的语法》中提出了一套图形语法,将图形元素抽象成可以自由组合的要素,类似Photoshop中的图层累加,ggplot2将指定的元素/映射关系逐层叠加,最终形成所图形。更加深入学习ggplot2,请参考《ggplot2: 数据分析与图形艺术》。
1480
2019/07/22
1.7K0
高阶可视化绘图系统:ggplot2入门
「R」ggplot2数据可视化
R有几种不同的系统用来产生图形,但ggplot2是最优雅而多变的那一种。ggplot2实现了图形语法,一种描述和构建图形的逻辑系统。通过ggplo2,我们能够快速学习,多处应用。
王诗翔呀
2020/07/03
7.4K0
单细胞等高线图
等高线指的是地形图上高程相等的相邻各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线,并垂直投影到一个水平面上,并按比例缩绘在图纸上,就得到等高线。 等高线也可以看作是不同海拔高度的水平面与实际地面的交线,所以等高线是闭合曲线。在等高线上标注的数字为该等高线的海拔。
生信交流平台
2022/09/21
7640
单细胞等高线图
ggplot2|详解八大基本绘图要素
ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。
生信补给站
2020/08/05
7K0
ggplot2|详解八大基本绘图要素
R绘图笔记 | 一般的散点图绘制
plot函数中,x和y分别表示所绘图形的横坐标和纵坐标;函数中的...为附加的参数。plot函数默认的使用格式如下:
DoubleHelix
2020/11/03
5.3K0
R绘图笔记 | 一般的散点图绘制
ggplot2|玩转Manhattan图-你有被要求这么画吗?
Manhattan图算是GWAS分析的标配图了,可参考Bio|manhattan图 进行绘制。
生信补给站
2020/08/06
1.3K0
用R在地图上绘制网络图的三种方法
作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源
生信宝典
2019/05/09
2.8K0
用R在地图上绘制网络图的三种方法
ggplot2-plotly|让你的火山图“活”过来
火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P value(P值),值越大差异越显著。得名原因也许是因为结果图像火山吧
生信补给站
2020/08/06
3.3K0

相似问题

在地图上绘制点与点之间的线?

13

底图-根据坐标在地图上绘制点;点大小=出现次数

10

在ggplot2中绘制两点之间的线

12

用Manim在图上的坐标范围内绘制多个点?

14

Cartopy在地图上绘制不需要的线

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档