java-Apache Beam TextIO glob获取原始文件名
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Apache Beam TextIO glob获取原始文件名,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1233字,纯文字阅读大概需要2分钟。
内容图文
![java-Apache Beam TextIO glob获取原始文件名](/upload/InfoBanner/zyjiaocheng/686/6067cd5819e7483aae2dc4526c7ac268.jpg)
我已经建立了管道.我必须解析数百个* .gz文件.因此,glob的效果很好.
但是我需要当前处理文件的原始名称,因为我想将结果文件命名为原始文件.
有人能帮我一下吗?
这是我的代码.
@Default.String(LOGS_PATH + "*.gz")
String getInputFile();
void setInputFile(String value);
TextIO.Read read = TextIO.read().withCompressionType(TextIO.CompressionType.GZIP).from(options.getInputFile());
read.getName();
p.apply("ReadLines", read).apply(new CountWords())
.apply(MapElements.via(new FormatAsTextFn()))
.apply("WriteCounts", TextIO.write().to(WordCountOptions.LOGS_PATH + "_" + options.getOutput()));
p.run().waitUntilFinish();
解决方法:
从Beam 2.2开始,可以结合使用FileIO.match(),FileIO.read()和自定义代码来读取文本行.您已经可以在HEAD上使用它,或者可以等到2.2版完成(当前正在进行中).
PCollection<KV<String, String>> filesAndLines =
p.apply(FileIO.match().filepattern(...))
.apply(FileIO.read())
.apply(ParDo.of(new DoFn<ReadableFile, KV<String, String>>() {
@ProcessElement
public void process(ProcessContext c) {
ReadableFile f = c.element();
String filename = f.getMetadata().resourceId().toString();
String line;
try (BufferedReader r = new BufferedReader(Channels.newInputStream(f.open()))) {
while ((line = r.readLine()) != null) {
c.output(KV.of(filename, line));
}
}
}
}));
内容总结
以上是互联网集市为您收集整理的java-Apache Beam TextIO glob获取原始文件名全部内容,希望文章能够帮你解决java-Apache Beam TextIO glob获取原始文件名所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。