java - 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() 方法的方法?那不需要读取第一条记录只是为了有一个模式?那确实创建了一个合并的模式?
将不胜感激任何提示和例子...
解决方案
推荐阅读
- python - 对 Python 来说相对较新:from __future__ 是干什么用的?
- excel - VBA 临时表单提取问题
- java - 忽略 Excel 警告
- php - 在 Woocommerce/wordpress 中正确添加功能的方式和位置;以及如何称呼他们?
- r - 系列名称,行尾带有系列颜色系列
- r - 无法安装 RADammi 软件包
- java - JAVA,使法线数组具有顶点数组的长度(来自已解析的 OBJ 文件)
- pandas - 将垂直线添加到 pandas df.plot of timeseries
- c# - 如何使用 JSON.NET 将 POCO 列表序列化为字符串列表,以减小大小?
- bash - 递归使用grep时如何从结果中排除目录名称