实木复合地板:将特定列读入内存

时间:2014-08-15 21:27:04

标签: mapreduce avro parquet

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

是否有api我可以传递我需要的列并返回一个2D数组表?

3 个答案:

答案 0 :(得分:1)

如果您可以使用配置单元,那么创建配置单元表并发出简单的选择查询将是最简单的选择。

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记录,排除的字段无效,而不是2D数组。

要修改架构,请查看org.apache.avro.Schema和org.apache.avro.SchemaBuilder。确保修改的模式与原始模式兼容。

答案 1 :(得分:0)

选项:

  1. 使用Hive表创建包含存储格式镶木地板的所有列的表格,并通过指定列名称读取所需的列
  2. 为表创建Thrift并使用thrift字段从代码中读取数据(Java或Scala)

答案 2 :(得分:0)

您还可以使用本机解析拼贴文件的apache drill。