【问题标题】:Flink error: java.lang.NoSuchMethodError: org.apache.flink.api.table.TableFlink 错误:java.lang.NoSuchMethodError:org.apache.flink.api.table.Table
【发布时间】:2017-05-06 11:30:02
【问题描述】:

我正在尝试使用 flink 的 table 和 sql api 作为一个简单的示例,我从文件中读取字符串,将其转换为 Tuple2 并尝试将其插入表中。这是我的代码。

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.table.StreamTableEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.table.Table;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class table_streaming_test
{
    public static void main (String[] args) throws Exception
    {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //create execution environment
        StreamTableEnvironment tEnv= StreamTableEnvironment.getTableEnvironment(env); 
        env.setParallelism(1);
        DataStream<String> datastream_in= env.readTextFile("file:/home/rishikesh/new_workspace1/table_streaming/stocks.txt");
         DataStream<Tuple2<String,Integer>> ds=  datastream_in
             .flatMap(new Splitter());  // transformation flatmap
         Table msg=tEnv.fromDataStream(ds).as("symbol,price");
         Table result = msg.select("symbol ='A'");
         DataStream<String> ds2 =tEnv.toDataStream(result, String.class);
         ds2.print();
         env.execute();
    }
public static class Splitter implements FlatMapFunction<String,     Tuple2<String, Integer>> {
        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
            String[] token= sentence.split(",");
            out.collect(new Tuple2<String, Integer>(token[0],Integer.parseInt(token[1])));
        }
    }
}

错误如下:(发生在DataStream&lt;String&gt; ds2 =tEnv.toDataStream(result, String.class);行)

log4j:WARN No appenders could be found for logger (org.apache.flink.api.java.typeutils.TypeExtractor).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.flink.api.table.Table.<init>(Lorg/apache/flink/api/table/TableEnvironment;Lorg/apache/flink/api/table/plan/logical/LogicalNode;)V
    at org.apache.flink.api.table.StreamTableEnvironment.ingest(StreamTableEnvironment.scala:97)
    at org.apache.flink.api.java.table.StreamTableEnvironment.fromDataStream(StreamTableEnvironment.scala:61)
    at table_streaming_test.main(table_streaming_test.java:87)

包含的 jar 文件有:

  1. Flink-dist_2.10-1.1.3.jar
  2. flink-python_2.10-1.1.3.jar
  3. flink-table_2.10-1.1.3.jar
  4. log4j-1.2.17.jar
  5. slf4j-log4j12-1.7.7.jar
  6. JavaSE-1.7

JavaSE-1.7

【问题讨论】:

  • 你能把截图中的代码和异常转换成文本吗?有一些部分被截掉了,这样更容易搜索和复制。谢谢
  • 当然,费边。我已经编辑了帖子。
  • 你能举个stocks.txt的例子吗?
  • 你使用什么构建工具?

标签: java apache-flink flink-streaming


【解决方案1】:

错误“java.lang.NoSuchMethodError”的一个可能原因是您使用的 flink 版本与系统上安装的版本不同。

对我来说,我有 Flink 1.4.2 并且我使用的版本是 1.3.2 。所以我更新了我的 pom 文件以具有相同的版本并且它工作正常。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多