我正在编写用于测试的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
我试过但没有成功解决这个问题,有人可以指导我吗?
答案 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,this是PTransform
的实施细节从该代码。