Flink 离线处理案例

Dataset是flink的常用程序,数据集通过source进行初始化,例如读取文件或者序列化集合,然后通过transformation(filtering、mapping、joining、grouping)将数据集转成,然后通过sink进行存储,既可以写入hdfs这种分布式文件系统,也可以打印控制台,flink可以有很多种运行方式,如local、flink集群、yarn等.

scala版本:

import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.api.scala._

object WordCountScala{
 def main(args: Array[String]) {
   //初始化环境
   val env = ExecutionEnvironment.getExecutionEnvironment
   //从字符串中加载数据
   val text = env.fromElements(
 "Who's there?",
 "I think I hear them. Stand, ho! Who's there?")
 //分割字符串、汇总tuple、按照key进行分组、统计分组后word个数
 val counts = text.flatMap { _.toLowerCase.split("\\W+")
 .filter { _.nonEmpty } }
 .map { (_, 1) }
 .groupBy(0)
 .sum(1)
 //打印
 counts.print()
 }
}


java版本:

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

public class WordCountJava {
 public static void main(String[] args) throws Exception {
   //构建环境
   final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
   //通过字符串构建数据集
   DataSet<String> text = env.fromElements(
           "Who's there?",
           "I think I hear them. Stand, ho! Who's there?");
   //分割字符串、按照key进行分组、统计相同的key个数
   DataSet<Tuple2<String, Integer>> wordCounts = text
           .flatMap(new LineSplitter())
           .groupBy(0)
           .sum(1);
   //打印
   wordCounts.print();
 }
 //分割字符串的方法
 public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
   @Override
   public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
       for (String word : line.split(" ")) {
           out.collect(new Tuple2<String, Integer>(word, 1));
       }
   }
 }
}

转载来着

作者:一个人一匹马
链接:https://www.jianshu.com/p/1207af566285
来源:简书
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值