flink广播变量不能复用吗?

来源:4-38 本章节小结及作业

Amourxxxx

2021-03-01

 val broadVar = env.fromCollection(List(Room("a", 11.2), Room("b", 22.3)))
    val data = env.fromCollection(List("a", "b"))

    val ds1 = data.map(new RichMapFunction[String, String] {
      override def open(parameters: Configuration): Unit = {
        val broadCast = getRuntimeContext.getBroadcastVariable[String]("roomBroadcast")
        println(broadCast.size())
      }
      override def map(in: String): String = {in}
    }).withBroadcastSet(broadVar, "roomBroadcast")
    
    ds1.print()

    data.map(new RichMapFunction[String, String] {
      override def open(parameters: Configuration): Unit = {
        val broadCast = getRuntimeContext.getBroadcastVariable[String]("roomBroadcast")
        println(broadCast.size())
      }
      override def map(in: String): String = {in}
    }).print()

在第一个算子里传递了广播变量后,在第二个算子没有传递,就不能复用使用之前广播好的变量吗?

写回答

2回答

Michael_PK

2021-03-02

这么测试没用过,你的代码是同一个数据集来的,直接一次能处理掉不

1
0

Amourxxxx

提问者

2021-03-02

这种场景肯定是不能一次性处理的啊。
比如有个字典表。广播后,在多处逻辑都需要使用。这种情况应该很常见的。然后在这里我貌似只能,每个需要使用到的算子都广播一次?

1
3
Amourxxxx
额。。我说的场景,如果用spark解决,就是直接在driver里注册一次广播变量,然后在任意算子里都可以执行。 我上面模拟的这个代码,如果再加个with。。不就重复了么。和那个data没关系,我想表达的意思就是,这个with貌似是和使用方的算子强绑定的。谁用谁给自己传递一份。这样的话。不相当于,多次传递了么。有没有其他更好的方法呢。
2021-03-02
共3条回复

新一代大数据计算引擎 Flink从入门到实战

入行或转型大数据新姿势,多语言系统化讲解,极速入门Flink

969 学习 · 296 问题

查看课程