Apache Beam代码中的语法错误插入

时间:2018-05-23 16:42:56

标签: java apache-beam

我正在编写用于测试的Apache光束代码。请参考下面的代码。我创建了示例SimpleFunction并应用代码并尝试编译。

    public static void main(String[] args) throws IOException {
        System.out.println("Test Log");

        PipelineOptions options = PipelineOptionsFactory.create();
        //options.setRunner(SparkRunner.class);
        options.setRunner(SparkRunner.class);

        Pipeline p = Pipeline.create(options);

        p.apply(FileIO.match().filepattern("hdfs://path/to/*.gz"))
            // withCompression can be omitted - by default compression is detected from the filename.
            .apply(FileIO.readMatches())
            .apply(MapElements
                // uses imports from TypeDescriptors
                .via(
                    new SimpleFunction <ReadableFile, KV<String,String>>() {

                        private static final long serialVersionUID = -7867677L;

                        @SuppressWarnings("unused")
                        public KV<String,String> createKV(ReadableFile f) {
                            String temp = null;
                            try{
                            temp = f.readFullyAsUTF8String();
                            }catch(IOException e){

                            }
                            return KV.of(f.getMetadata().resourceId().toString(), temp);
                        }

                        @Override
                        public String apply(ReadableFile element, KV<String, String> input) {
                            StringBuilder str = new StringBuilder();
                            return str.toString();
                        }
                    }

            ))
            .apply(FileIO.write());
        p.run();
    }

但编译器正在抛出syntax error at public String apply(ReadableFile

我试过但没有成功解决这个问题,有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

SimpleFunction<InputT, OutputT>的值为InputT,并返回OutputT的值。在这种情况下,apply的签名为OutputT apply(InputT input);,请参阅here

对于您的类型,SimpleFunction必须如下所示:

new SimpleFunction <ReadableFile, KV<String,String>>() {
   ...
   @Override
   public KV<String,String> apply(ReadableFile input) {
      ...
   }
}

例如,请参阅如何使用here

在您的情况下,您需要更多关于readMatches()的逻辑,请参阅here,例如它如何应用于解析Avros,thisPTransform的实施细节从该代码。