3

我已将 mysql 表导出到镶木地板文件(基于 avro)。现在我想从该文件中读取特定的列。我怎样才能完全阅读特定的专栏?我正在寻找 java 代码示例。

是否有一个 api 可以传递我需要的列并取回一个二维表数组?

4

3 回答 3

1

如果您可以使用 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。确保修改后的架构与原始架构兼容。

于 2015-01-15T16:49:07.393 回答
0

选项:

  1. 使用 Hive 表创建具有存储格式 parquet 的所有列的表,并通过指定列名来读取所需的列
  2. 为表创建 Thrift 并使用 thrift 字段从代码(Java 或 Scala)中读取数据
于 2015-09-08T02:01:27.310 回答
0

您还可以使用本地解析 parquet 文件的 apache Drill。

于 2015-09-21T16:42:48.870 回答