在java中创建镶木地板文件

Imb*_* M. 10 java parquet

有没有办法从java创建镶木地板文件?

我在内存中有数据(java类),我想把它写成一个镶木地板文件,以后再从apache-drill中读取它.

有没有一种简单的方法可以做到这一点,比如将数据插入到sql表中?

得到它了

谢谢您的帮助.

结合答案和这个链接,我能够创建一个镶木地板文件并用钻头读回来.

Max*_*ind 12

ParquetWriter的构造函数已被弃用(1.8.1)但不是ParquetWriter本身,您仍然可以通过扩展其中的抽象Builder子类来创建ParquetWriter.

这里有一个来自镶木地板创建者自己的示例ExampleParquetWriter:

  public static class Builder extends ParquetWriter.Builder<Group, Builder> {
    private MessageType type = null;
    private Map<String, String> extraMetaData = new HashMap<String, String>();

    private Builder(Path file) {
      super(file);
    }

    public Builder withType(MessageType type) {
      this.type = type;
      return this;
    }

    public Builder withExtraMetaData(Map<String, String> extraMetaData) {
      this.extraMetaData = extraMetaData;
      return this;
    }

    @Override
    protected Builder self() {
      return this;
    }

    @Override
    protected WriteSupport<Group> getWriteSupport(Configuration conf) {
      return new GroupWriteSupport(type, extraMetaData);
    }

  }
Run Code Online (Sandbox Code Playgroud)

如果您不想使用Group和GroupWriteSupport(捆绑在Parquet中,但仅作为数据模型实现的示例),您可以使用Avro,Protocol Buffers或Thrift内存数据模型.以下是使用Avro编写Parquet的示例:

try (ParquetWriter<GenericData.Record> writer = AvroParquetWriter
        .<GenericData.Record>builder(fileToWrite)
        .withSchema(schema)
        .withConf(new Configuration())
        .withCompressionCodec(CompressionCodecName.SNAPPY)
        .build()) {
    for (GenericData.Record record : recordsToWrite) {
        writer.write(record);
    }
}   
Run Code Online (Sandbox Code Playgroud)

您将需要这些依赖项:

<dependency>
    <groupId>org.apache.parquet</groupId>
    <artifactId>parquet-avro</artifactId>
    <version>1.8.1</version>
</dependency>

<dependency>
    <groupId>org.apache.parquet</groupId>
    <artifactId>parquet-hadoop</artifactId>
    <version>1.8.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

完整的例子在这里.

  • @7H3IN5ID3R 没有。您必须指定架构 (2认同)