【问题标题】:Parquet: read particular columns into memoryParquet:将特定列读入内存
【发布时间】:2014-08-15 21:27:03
【问题描述】:

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

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

【问题讨论】:

    标签: mapreduce avro parquet


    【解决方案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。确保修改后的架构与原始架构兼容。

    【讨论】:

      【解决方案2】:

      选项:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-22
          相关资源
          最近更新 更多