我已将 mysql 表导出到镶木地板文件(基于 avro)。现在我想从该文件中读取特定的列。我怎样才能完全阅读特定的专栏?我正在寻找 java 代码示例。
是否有一个 api 可以传递我需要的列并取回一个二维表数组?
如果您可以使用 hive,那么创建一个 hive 表并发出一个简单的选择查询将是迄今为止最简单的选择。
create external table tbl1(<columns>) location '<file_path>' stored as parquet;
select col1,col2 from tbl1;
//this works in hive 0.14
您也可以使用 JDBC 驱动程序从 java 程序中执行此操作。
否则,如果您想完全留在 java 中,则需要通过排除除您要获取的字段之外的所有字段来修改 avro 模式。然后,当您读取文件时,将修改后的模式提供为阅读器模式,它只会读取包含的列。但是您将获得原始的 avro 记录,其中排除的字段无效,而不是二维数组。
要修改架构,请查看 org.apache.avro.Schema 和 org.apache.avro.SchemaBuilder。确保修改后的架构与原始架构兼容。
选项:
您还可以使用本地解析 parquet 文件的 apache Drill。