1、POJO方式

  1. public class WordCountPojo {
  2. public static class Word{
  3. private String word;
  4. private int frequency;
  5.  
  6. public Word() {
  7. }
  8.  
  9. public Word(String word, int frequency) {
  10. this.word = word;
  11. this.frequency = frequency;
  12. }
  13.  
  14. public String getWord() {
  15. return word;
  16. }
  17.  
  18. public void setWord(String word) {
  19. this.word = word;
  20. }
  21.  
  22. public int getFrequency() {
  23. return frequency;
  24. }
  25.  
  26. public void setFrequency(int frequency) {
  27. this.frequency = frequency;
  28. }
  29.  
  30. @Override
  31. public String toString() {
  32. return "Word=" + word + " freq=" + frequency;
  33. }
  34. }
  35.  
  36. /**
  37. * Implements the string tokenizer that splits sentences into words as a user-defined
  38. * FlatMapFunction. The function takes a line (String) and splits it into
  39. * multiple Word objects.
  40. */
  41. public static final class Tokenizer implements FlatMapFunction<String, Word> {
  42.  
  43. @Override
  44. public void flatMap(String value, Collector<Word> out) {
  45. // normalize and split the line
  46. String[] tokens = value.toLowerCase().split("\\W+");
  47.  
  48. // emit the pairs
  49. for (String token : tokens) {
  50. if (token.length() > 0) {
  51. out.collect(new Word(token, 1));
  52. }
  53. }
  54. }
  55. }
  56.  
  57. public static void main(String args[]) throws Exception {
  58. final ParameterTool params = ParameterTool.fromArgs(args);
  59.  
  60. // set up the execution environment
  61. final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
  62.  
  63. // make parameters available in the web interface
  64. env.getConfig().setGlobalJobParameters(params);
  65.  
  66. // get input data
  67. DataSet<String> text;
  68. if (params.has("input")) {
  69. // read the text file from given input path
  70. text = env.readTextFile(params.get("input"));
  71. } else {
  72. // get default test text data
  73. System.out.println("Executing WordCount example with default input data set.");
  74. System.out.println("Use --input to specify file input.");
  75. text = WordCountData.getDefaultTextLineDataSet(env);
  76. }
  77.  
  78. DataSet<Word> counts = text
  79. // split up the lines into Word objects (with frequency = 1)
  80. .flatMap(new Tokenizer())
  81. // group by the field word and sum up the frequency
  82. .groupBy("word")
  83. .reduce(new ReduceFunction<Word>() {
  84. @Override
  85. public Word reduce(Word value1, Word value2) throws Exception {
  86. return new Word(value1.word, value1.frequency + value2.frequency);
  87. }
  88. });
  89. if (params.has("output")) {
  90. counts.writeAsText(params.get("output"), FileSystem.WriteMode.OVERWRITE);
  91. // execute program
  92. env.execute("WordCount-Pojo Example");
  93. } else {
  94. System.out.println("Printing result to stdout. Use --output to specify output path.");
  95. counts.print();
  96. }
  97. }
  98.  
  99. }

2、元组方式

  1. public class WordCount {
  2.  
  3. /**
  4. * Implements the string tokenizer that splits sentences into words as a user-defined
  5. * FlatMapFunction. The function takes a line (String) and splits it into
  6. * multiple pairs in the form of "(word,1)" ({@code Tuple2<String, Integer>}).
  7. */
  8. public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
  9. @Override
  10. public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
  11. // normalize and split the line
  12. String[] tokens = value.toLowerCase().split("\\W+");
  13.  
  14. // emit the pairs
  15. for (String token : tokens) {
  16. if (token.length() > 0) {
  17. out.collect(new Tuple2<>(token, 1));
  18. }
  19. }
  20. }
  21. }
  22.  
  23. public static void main(String args[]) throws Exception {
  24. final ParameterTool params = ParameterTool.fromArgs(args);
  25.  
  26. // set up the execution environment
  27. final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
  28.  
  29. // make parameters available in the web interface
  30. env.getConfig().setGlobalJobParameters(params);
  31.  
  32. // get input data
  33. DataSet<String> text;
  34. if (params.has("input")) {
  35. // read the text file from given input path
  36. text = env.readTextFile(params.get("input"));
  37. } else {
  38. // get default test text data
  39. System.out.println("Executing WordCount example with default input data set.");
  40. System.out.println("Use --input to specify file input.");
  41. text = WordCountData.getDefaultTextLineDataSet(env);
  42. }
  43.  
  44. DataSet<Tuple2<String,Integer>> counts = text
  45. // split up the lines in pairs (2-tuples) containing: (word,1)
  46. .flatMap(new Tokenizer())
  47. // group by the tuple field "0" and sum up tuple field "1"
  48. .groupBy(0)
  49. .reduce(new ReduceFunction<Tuple2<String, Integer>>() {
  50. @Override
  51. public Tuple2<String, Integer> reduce(Tuple2<String, Integer> value1, Tuple2<String, Integer> value2) throws Exception {
  52. return new Tuple2<>(value1.f0,value1.f1+value2.f1);
  53. }
  54. }); //等效于sum(1)
  55. // .sum(1);
  56. // emit result
  57. if(params.has("output")){
  58. counts.writeAsCsv(params.get("output"),"\n"," ");
  59. // execute program
  60. env.execute("WordCount batch");
  61. }else {
  62. System.out.println("Printing result to stdout. Use --output to specify output path.");
  63. counts.print();
  64. }
  65.  
  66. }
  67. }

flink batch wordcount的更多相关文章

  1. Flink Batch SQL 1.10 实践

    Flink作为流批统一的计算框架,在1.10中完成了大量batch相关的增强与改进.1.10可以说是第一个成熟的生产可用的Flink Batch SQL版本,它一扫之前Dataset的羸弱,从功能和性 ...

  2. Flink实例-Wordcount详细步骤

    link实例之Wordcount详细步骤 1.我的IDE是IntelliJ IDEA.在官网上https://www.jetbrains.com/idea/下载最新版2018.2的IDEA,如下图.破 ...

  3. Apache Flink - Batch(DataSet API)

    Flink DataSet API编程指南: Flink中的DataSet程序是实现数据集转换的常规程序(例如,过滤,映射,连接,分组).数据集最初是从某些来源创建的(例如,通过读取文件或从本地集合创 ...

  4. [Flink]Flink1.6三种运行模式安装部署以及实现WordCount

    前言 Flink三种运行方式:Local.Standalone.On Yarn.成功部署后分别用Scala和Java实现wordcount 环境 版本:Flink 1.6.2 集群环境:Hadoop2 ...

  5. 【Flink】Flink基础之WordCount实例(Java与Scala版本)

    简述 WordCount(单词计数)作为大数据体系的标准示例,一直是入门的经典案例,下面用java和scala实现Flink的WordCount代码: 采用IDEA + Maven + Flink 环 ...

  6. hadoop记录-[Flink]Flink三种运行模式安装部署以及实现WordCount(转载)

    [Flink]Flink三种运行模式安装部署以及实现WordCount 前言 Flink三种运行方式:Local.Standalone.On Yarn.成功部署后分别用Scala和Java实现word ...

  7. Apache Flink Quickstart

    Apache Flink 是新一代的基于 Kappa 架构的流处理框架,近期底层部署结构基于 FLIP-6 做了大规模的调整,我们来看一下在新的版本(1.6-SNAPSHOT)下怎样从源码快速编译执行 ...

  8. Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

    本文由  网易云发布. 1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是原生的流处理系统,提供high level的API.Flink也提 ...

  9. Flink的高可用集群环境

    Flink的高可用集群环境 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布,数据通信以及容错机制等功能. 因现在主要Flink这一块做先关方面的学习, ...

随机推荐

  1. 【软件工程1916|W(福州大学)_助教博客】2019年上学期期末问卷调查结果公示

    1.调查问卷概况 福州大学2019W班,收集到有效答卷44份 2. 调查问卷情况 Q1:请问你平均每周在课程上花费多少小时? 去除自估水平超过40小时的,平均16.6H Q2.软工实践的各次作业分别花 ...

  2. 283.移动零 关于列表list与remove原理*****(简单)

    题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 注意,该题目要求不开辟行的数组空间,在原数据上进行操作. 示例: 输入: [0,1,0,3,12 ...

  3. golang 登录

    用户的两种登录模式 1.LDAP登录 //ldapLogin 通过LDAP登陆 func (m *Member) ldapLogin(account string, password string) ...

  4. 【入门篇一】HelloWorld演示(2)

    一.传统使用 Spring 开发一个“HelloWorld”的 web 应用 1. 创建一个 web 项目并且导入相关 jar 包. 2. 创建一个 web.xml 3. 编写一个控制类(Contro ...

  5. html表格及列表

    表格的属性: border:边框 cellpadding:内边距  单元格边框跟内容之间的间距 cellspacing:外边距  单元格跟单元格之间的距离 align:表格的对其样式 width:宽度 ...

  6. __str__与__repr__的触发顺序总结

    1.__str__是个内置的方法,无需使用者去调用,其会在满足某一条件时自动触发.那么要触发它运行都有哪些条件呢? 有三种条件,分别为:print , str , %s 2.__repr__同样是个内 ...

  7. [C/C++]大小端字节序转换程序

    计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式). 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿 ...

  8. css盲点

    以下纯属个人知识扫盲,记录下笔记 1.子元素设置display:inline-block时,彼此之间会出现一条细小的缝隙,解决办法:父元素设置font-size:0:就可消除缝隙了 2.能不用动画就不 ...

  9. 第04组 Alpha冲刺(3/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习 接下来的计划 实现更多的功能 为下周的比赛准备 还剩 ...

  10. git强制合并另一个分支

    New分支和Old分支都修改了同样的部分,有冲突,但是想在Old分之上合并New分支的内容,并且以New分支为主,就是不自己手动解决冲突,碰到冲突,直接以New分支为主. 参考 https://git ...