Flink 使用 Scala 编程中注意的隐式转换

写代码过程中,IDE 的代码提示功能是程序员的最爱,但是在用 Scala 写 Flink 代码的过程中,经常会有不提示的情况。

蛋疼。。。

这个就是 Scala 的引入包的问题,常用的用下面这几个,mark 下,

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

注意后面的下划线,就是整包导入的意思,类似Java里面的星号 * 。

这样处理后,在我们用点提示的时候,对应的api方法就会出来了,可以选择自己需要的实现方法。

附加,使用 flink sql 版本的 wordcount(写wordcount还是api好用,用sql麻烦。。)

import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala._
import org.apache.flink.table.api._
import org.apache.flink.table.api.bridge.scala._

/**
 * @Author: shipfei
 * @Date: 2021/3/4 13:26
 * motto: Saying and doing are two different things.
 */
object WcBySql {

  val filePath = "D:\\dev\\workspace\\eclipse-workspace\\bigdata-realtime\\my-demo\\input\\wc.txt"

  def main(args: Array[String]): Unit = {
    // 1. create table env (创建表执行环境)
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    val settings = EnvironmentSettings.newInstance().useOldPlanner().inStreamingMode().build()
    val tableEnv = StreamTableEnvironment.create(env, settings)

    // 2. inputStream => dataStream(流转化,输入流 map 转化成需要的实体类)
    val inputStream: DataStream[String] = env.readTextFile(filePath)
    val dataStream: DataStream[(String, Int)] = inputStream.flatMap(_.split(" ")).map((_, 1))

    // 3. dataStream => inputTable(数据流转化成inputTable表)
    val inputTable = tableEnv.fromDataStream[(String, Int)](dataStream, $"word", $"count")
    val resultTable = inputTable.groupBy($"word").select($"word", $"count".sum)

    // 4. sink print
    resultTable.toRetractStream[(String, Int)].print("result")

    // 5. 任务执行
    env.execute("WcBySql Job")
  }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值