java - 如何使用 apache arrow 在 java 中编写 Parquet 文件

标签 java parquet apache-arrow

我正在尝试将java中的数据写入apache parquet。到目前为止,我所做的是通过此处的示例使用 apache arrow:https://arrow.apache.org/cookbook/java/schema.html#creating-fields并创建一个箭头格式的数据集。

问题是,之后如何将其写入 Parquet ?另外,我是否需要使用 apache arrow 将数据输出为 parquet 文件?或者我可以直接使用apache parquet序列化数据然后将其输出为parquet文件吗?

我做了什么:

try (BufferAllocator allocator = new RootAllocator()) {
    Field name = new Field("name", FieldType.nullable(new ArrowType.Utf8()), null);
    Field age = new Field("age", FieldType.nullable(new ArrowType.Int(32, true)), null);
    Schema schemaPerson = new Schema(asList(name, age));
    try(
        VectorSchemaRoot vectorSchemaRoot = VectorSchemaRoot.create(schemaPerson, allocator)
    ){
        VarCharVector nameVector = (VarCharVector) vectorSchemaRoot.getVector("name");
        nameVector.allocateNew(3);
        nameVector.set(0, "David".getBytes());
        nameVector.set(1, "Gladis".getBytes());
        nameVector.set(2, "Juan".getBytes());
        IntVector ageVector = (IntVector) vectorSchemaRoot.getVector("age");
        ageVector.allocateNew(3);
        ageVector.set(0, 10);
        ageVector.set(1, 20);
        ageVector.set(2, 30);
        vectorSchemaRoot.setRowCount(3);
        File file = new File("randon_access_to_file.arrow");
        try (
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            ArrowFileWriter writer = new ArrowFileWriter(vectorSchemaRoot, null, fileOutputStream.getChannel())
        ) {
            writer.start();
            writer.writeBatch();
            writer.end();
            System.out.println("Record batches written: " + writer.getRecordBlocks().size() + ". Number of rows written: " + vectorSchemaRoot.getRowCount());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

但这输出为箭头文件。不是 Parquet 。有什么想法可以将其输出到 Parquet 文件吗?我是否需要箭头来生成 Parquet 文件 - 或者我可以直接使用 Parquet 吗?

最佳答案

Arrow Java 尚不支持写入 Parquet 文件,但您可以使用 Parquet 来执行此操作。

Arrow 数据集测试类中的一些代码可能会有所帮助。参见

org.apache.arrow.dataset.ParquetWriteSupport;
org.apache.arrow.dataset.file.TestFileSystemDataset; 

第二个类有一些使用第一个类中的实用程序的测试。

您可以在 GitHub 上找到它们: https://github.com/apache/arrow/tree/master/java/dataset/src/test/java/org/apache/arrow/dataset

关于java - 如何使用 apache arrow 在 java 中编写 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73795678/

相关文章:

java - Spring Boot、JNDI 数据源、Tomcat

scala - 无法将数据 append 到 Parquet [FileAlreadyExists 异常]

rlang::hash 无法区分箭头查询

c++ - 通过CMake添加子项目

amazon-web-services - AWS Glue 书签

R+箭头 10 : convert blank to numeric NA

java - JPA EntityManager - 使用合并生成默认值?

java - 仅当我选择一个选项时, Angular 显示按钮和区域

java - 在空对象上调用静态方法

python - 将 pyarrow 模式分配给 pa.Table.from_pandas()