flink-scala的wordcount案例(分别用流处理和批处理)

worldcount样例

1.流式

windows下载netcat,然后配置路径到path
命令行启动nc -l -p 8000监听端口
启动scala程序,代码如下

import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}

object StreamWcApp {
  //流处理,要往8000端口写数据

  def main(args: Array[String]): Unit = {
    //从外部命令中获取参数
//    val tool: ParameterTool = ParameterTool.fromArgs(args)
//    val host: String = tool.get("host")
//    val port: Int = tool.get("port").toInt
    //自己定义,windows下载https://eternallybored.org/misc/netcat/下载netcat,然后
    //配置netcat到path环境变量,自己试一下 nc -l -p  8000 ,然后启动这个脚本
    val host: String = "localhost"
    val port: Int = 8000
    //创建流处理环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //接收socket文本流
    val textDstream: DataStream[String] = env.socketTextStream(host, port)
    // flatMap和Map需要引用的隐式转换
    import org.apache.flink.api.scala._
    //处理 分组并且sum聚合
    val dStream: DataStream[(String, Int)] = textDstream.flatMap(_.split(" ")).filter(_.nonEmpty).map((_, 1)).keyBy(0).sum(1)
    //打印
    dStream.print()

    env.execute()
  }
}

运行在这里插入图片描述

2.批处理

package worldcount

import org.apache.flink.api.scala.{AggregateDataSet, DataSet, ExecutionEnvironment}

object WordCount {
  //批处理
  def main(args: Array[String]): Unit = {

    //构造执行环境
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
    //读取文件
    val input = "C:\\Users\\Administrator\\IdeaProjects\\UserBehaviorAnalysis\\HotItemsAnalysis\\src\\main\\resources\\1.txt"
    val ds: DataSet[String] = env.readTextFile(input)
    // 其中flatMap 和Map 中  需要引入隐式转换
    import org.apache.flink.api.scala.createTypeInformation
    //经过groupby进行分组,sum进行聚合
    val aggDs: AggregateDataSet[(String, Int)] = ds.flatMap(_.split(" ")).map((_, 1)).groupBy(0).sum(1)
    // 打印
    aggDs.print()

  }
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值