首页 > 解决方案 > Java:读取分区拼花文件的目录

问题描述

我从 Apache Spark 创建了 Parquet 输出,因此是一个包含多个文件的目录,每个分区一个。现在我想从 Java 中读取它。(新 API,许多方法今天已弃用)

读取单个文件是可以的:

HadoopInputFile file = HadoopInputFile.fromPath(new Path(nodeId), conf);
ParquetReadOptions options = ParquetReadOptions.builder().build();
try (ParquetFileReader reader = ParquetFileReader.open(file, options);) {
  MessageType schema = reader.getFileMetaData().getSchema();
}

如果文件是一个目录,ParquetFileReader 会抱怨“是一个目录”。美好的。所以我需要一种支持目录或允许添加多个文件的方法。此方法应读取所有文件并合并模式。

我最近的实验是

ParquetReadOptions options = ParquetReadOptions.builder().build();
ReadSupport readSupport = new GroupReadSupport();
ParquetReader r = ParquetReader.builder(readSupport, new Path(nodeId)).build();
SimpleGroup o = (SimpleGroup) r.read();

SimpleGroup 有一个模式,虽然没有公开,但我确信我可以沿着这条路线走。

但是没有更简单的方法吗?

一个确实公开 getFileMetaData().getSchema() 方法的方法?那不需要读取第一条记录只是为了有一个模式?那确实创建了一个合并的模式?

将不胜感激任何提示和例子...

标签: javahadoopparquet

解决方案


推荐阅读