Apache flink 从Flink调用外部脚本

Apache flink 从Flink调用外部脚本,apache-flink,Apache Flink,对你们中的一些人来说,这似乎是一个非常复杂的问题。我想使用ApacheFlink对来自SocketStream的数据应用一些算法。但是,这些算法是我使用Scala的sys.process包运行的外部可执行文件。以下是我希望Flink做的事情: 从SocketStream获取单个行: val text=env.socketTextStream(主机名、端口) val lines=text.flatMap{{{uu.toLowerCase.split(\\n”)过滤器{{{uu.nonEmpty}}

对你们中的一些人来说,这似乎是一个非常复杂的问题。我想使用ApacheFlink对来自SocketStream的数据应用一些算法。但是,这些算法是我使用Scala的
sys.process
包运行的外部可执行文件。以下是我希望Flink做的事情:

  • 从SocketStream获取单个行:

    val text=env.socketTextStream(主机名、端口)
    val lines=text.flatMap{{{uu.toLowerCase.split(\\n”)过滤器{{{uu.nonEmpty}}

  • 使用这些行作为命令行参数调用我的可执行算法。有点像这样:

    var op=“./Somefile.py”+行

  • 打印从可执行文件获得的输出

    op.print()


  • 显然,这不是我想要做的事情的正确方法,因为
    op
    不像
    不是数据接收器,因此没有打印任何内容。有什么方法可以实现这一点吗?

    如果将所有参数都放在一个字符串值中,则可以从
    MapFunction
    调用外部可执行文件

    这看起来像:

    val args: DataStream[String] = env.socketTextStream(hostName, port) 
    // assume each text line has all elements
    val out: DataStream[String] = args.map(new ExternalCaller())
    // print result
    out.print()
    


    我觉得可以用
    map
    完成,但这解决了我的问题。谢谢
    class ExternalCaller extends MapFunction[String, String] {
    
      override def map(args: String): String = {
        // call external executable with args here and return output
      }
    }