【发布时间】:2022-01-08 09:43:14
【问题描述】:
我正在尝试读取捆绑为 JAR 中资源的 parquet 文件,最好是作为流。
有没有人有一个不涉及首先将资源作为临时文件写出的工作示例?
这是我用来读取在打包为 JAR 之前在 IDE 中运行良好的文件的代码:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.parquet.avro.AvroParquetReader;
try {
Path path = new Path(classLoader.getResource(pattern_id).toURI());
Configuration conf = new Configuration();
try (ParquetReader<GenericRecord> r = AvroParquetReader.<GenericRecord>builder(
HadoopInputFile.fromPath(path, conf))
.disableCompatibility()
.build()) {
patternsFound.add(pattern_id);
GenericRecord record;
while ((record = r.read()) != null) {
// Do some work
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (NullPointerException | URISyntaxException e) {
e.printStackTrace();
}
从 JAR 文件运行此代码时,我收到此错误:
org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "jar"
我认为我可以通过以下方式解决:
InputStream inputFile = classLoader.getResourceAsStream(pattern_id);
但不知道如何让 AvroParquetReader 与输入流一起工作。
【问题讨论】:
标签: java hadoop jar avro parquet