簡體   English   中英

如何使用 apache 箭頭在 java 中編寫鑲木地板文件

[英]how to write parquet files in java with apache arrow

我正在嘗試將 java 中的數據寫入 apache 鑲木地板。 到目前為止,我所做的是通過此處的示例使用 apache 箭頭: https://arrow.apache.org/cookfieldbook/java/schema.html和箭頭格式數據集。

問題是,之后我如何將它寫入鑲木地板? 另外,我是否需要使用 apache 箭頭到 output 數據作為鑲木地板文件? 或者我可以使用 apache parquet 直接序列化數據,然后將 output 作為 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();
        }
    }
}

但這輸出為箭頭文件。 不是鑲木地板。 有什么想法可以將 output 改為鑲木地板文件嗎? 我是否需要箭頭來生成鑲木地板文件開始 - 還是我可以直接使用鑲木地板?

Arrow Java 尚不支持寫入 Parquet 文件,但您可以使用 Parquet 來執行此操作。

Arrow 數據集測試類中有一些代碼可能會有所幫助。

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

第二個 class 有一些使用第一個實用程序的測試。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM