栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spark跟Flink的区别、常见的Source

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spark跟Flink的区别、常见的Source

package com.shujia.core

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

object Demo01WordCount {
  def main(args: Array[String]): Unit = {
    
    val env: StreamExecutionEnvironment= StreamExecutionEnvironment.getExecutionEnvironment

    //默认并行度等于CPU的逻辑核数 相当于是任务的一个并行度
    env.setParallelism(2)

    
    val linesDS: DataStream[String] = env.socketTextStream("master", 8888)

    //对每一条数据进行切分
    val wordsDS: DataStream[String] = linesDS
      .flatMap(line => line.split(","))

    //将每个单词变成 K V 格式
    val wordsKVDS: DataStream[(String, Int)] = wordsDS.map(word => (word, 1))

    //按照每个单词进行分组
    val keyByDS: KeyedStream[(String, Int), String] = wordsKVDS.keyBy(kv => kv._1)

    //统计每个单词的数量 指定位置进行累加
    val wordCntDS: DataStream[(String, Int)] = keyByDS.sum(1)

    

    //将结果打印
    wordCntDS.print()

    //启动任务
    env.execute("Demo01WordCount")
  }
}
package com.shujia.source

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

object Demo01ListSource {
  def main(args: Array[String]): Unit = {
    //创建Flink的入口
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //基于本地集合,例如List构建DataStream
    val linesList: List[String] = List("java,java,spark", "spark,spark,java")

    val linesDS: DataStream[String] = env.fromCollection(linesList)

    linesDS
      .flatMap(_.split(","))
      .map(word=>(word,1))
      .keyBy(kv=>kv._1)
      .sum(1)
      .print()

    //启动任务
    env.execute()

  }
}
package com.shujia.source

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

object Demo02FileSource {
  def main(args: Array[String]): Unit = {

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    // 将文件作为Source构建DataStream --> 有界流
    val stuDS: DataStream[String] = env.readTextFile("Flink/data/stu/students.txt")

    // 统计班级人数
    stuDS
      .map(line => (line.split(",")(4), 1))
      .keyBy(kv => kv._1)
      .sum(1)
      .print()

    env.execute()
  }
}
package com.shujia.source

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

object Demo03SocketSource {
  def main(args: Array[String]): Unit = {

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //以Socket作为Source构建DataStream
    val linesDS: DataStream[String] = env.socketTextStream("master", 8888)
    
    
    linesDS
      .flatMap(line=>{
        print("flatMap")
        line.split(",")
      })
      .map(word=>(word,1))
      .keyBy(kv=>kv._1)
      .sum(1)
//      .print()

    env.execute()
  }
}
package com.shujia.source

import org.apache.flink.streaming.api.functions.source.SourceFunction
import org.apache.flink.streaming.api.scala._

object Demo04MySource {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //使用自定义的Source
    val myDS: DataStream[Int] = env.addSource(new MySource())
    myDS.print()

    env.execute()
  }
}

class MySource extends SourceFunction[Int] {
  
  override def run(ctx: SourceFunction.SourceContext[Int]): Unit = {
    //每调用一次collect方法 即可获得一条数据
    var i:Int=0
    while(true){
      ctx.collect(i)
      i+=1
      Thread.sleep(3000)
    }
  }

  //当程序结束是会被调用 主要用于回收资源
  override def cancel(): Unit = {

  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号