java - 在java中创建 Parquet 文件

标签 java parquet

有没有办法从 java 创建 parquet 文件?

我在内存中有数据(java 类),我想将它写入一个 parquet 文件,稍后从 apache-drill 读取它。

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

明白了

感谢您的帮助。

结合答案和这个 link ,我能够创建一个 parquet 文件并用 drill 读回它。

最佳答案

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

这是 Parquet 创造者自己的例子 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);
    }

  }

如果您不想使用 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);
    }
}   

您将需要这些依赖项:

<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>

完整示例 here .

关于java - 在java中创建 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39728854/

相关文章:

hadoop - 如何在 Hive 中存储特殊字符?

Hive 结果保存为 parquet 文件

java - 将通用列表传递给 JSP 标记

Java 无法连接到本地主机上的 MariaDB 数据库

java - "Java Date() returns date in UTC"- 它到底是什么意思?

java - RxJava 使用优化请求

java - 在 Spark 中对 RDD 执行分组并将每个组写入单独的 Parquet 文件

hadoop - 在具有 JSON 数据的 Parquet 文件上创建 Hive 表

amazon-s3 - UPSERT 拼花 Pyspark

java - Android 设备的屏幕截图