flink报错:No new data sinks have been defined since the last execution

初学flink,在IDEA上编写WordCount代码运行报错如下:

Exception in thread "main" java.lang.RuntimeException: No new data sinks have been defined since the last execution. The last execution refers to the latest call to 'execute()', 'count()', 'collect()', or 'print()'.
	at org.apache.flink.api.java.ExecutionEnvironment.createProgramPlan(ExecutionEnvironment.java:1092)
	at org.apache.flink.api.java.ExecutionEnvironment.createProgramPlan(ExecutionEnvironment.java:1072)
	at org.apache.flink.api.java.ExecutionEnvironment.executeAsync(ExecutionEnvironment.java:969)
	at org.apache.flink.api.java.ExecutionEnvironment.execute(ExecutionEnvironment.java:891)
	at org.apache.flink.api.scala.ExecutionEnvironment.execute(ExecutionEnvironment.scala:509)
	at com.fuyun.flink.WordCount$.main(WordCount.scala:42)
	at com.fuyun.flink.WordCount.main(WordCount.scala)

代码如下:

package com.fuyun.flink

// 因为很多算子Java和Scala名称都一样,必须要显示导入scala所有包告知使用Scala语言的算子,不然会报错
import org.apache.flink.api.scala._

object BatchWordCount {

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

    // 定义输入输出文件路径
    val input = "E:\\IDEAworkspace\\flinkLearning\\datas\\WordCount"

    // 创建一个批处理的执行环境
    val env:ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
    // 读取离线文件
    val inputDataSet:DataSet[String] = env.readTextFile(input)

    // 对离线文件单词统计,不区分大小写
    val counts = inputDataSet.flatMap(_.toLowerCase.split("\\s")) // 对元素转换为小写再进行分割
      .filter(_.nonEmpty) // 过滤空值
      .map((_, 1))  // 将元素组合成二元组
      .groupBy(0)  // 对第一个元素进行分组
      .sum(1)  // 对第二个元素求和

     // 控制台答应结果
     counts.print()
     
     // 调用execute方法执行
     env.execute("bath word count")

  }
}

问题原因及解决办法:
从报错日志可看出,自上次执行以来,没有定义新的数据接收器。对于离线批处理的算子,如:“count()”、“collect()”或“print()”等既有sink功能,还有触发的功能。
我们上面调用了print()方法,会自动触发execute,所以最后面的一行执行器没有数据可以执行。所以去掉最后一行代码即可,用了print()方法后无需再调用execute()方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值