微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C++中读取羽毛文件时启用内存映射

如何解决如何在C++中读取羽毛文件时启用内存映射

在 python 和 c++ 中读取相同的羽毛文件时,在 python 中,函数 pyarrow.feather.read_table() 比我用于 C++ 的 API 表现得非常好。当我进一步调查时,我发现主要区别是因为在 python 中 read_table() API 使用了一个名为 memory_map 的标志(认设置为 true)。当我禁用此标志时,c++ API 的性能比 Python 中的 read_table() 好。现在正如它所暗示的那样,C++ 认不使用 memory_mapping,而是为了提高我想使用它的性能。请建议我使用 c++ 内存映射的方法,因为在 c++ 可用的文档中没有找到任何感兴趣的 API。 我使用的代码是 -

#!/usr/bin/env python3
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.feather
import time

for i in range(20):
    start_time = time.time()

    table = pyarrow.feather.read_table('data'+str(i + 1)+'.feather')
    end_time = time.time()
    print("Time taken to read file is : ",(end_time - start_time)*1000,"ms")

C++ 代码是 -

void read_feather_to_table(std::string path,std::shared_ptr<arrow::Table> *feather_table){
    std::shared_ptr <arrow::io::RandomAccessFile> input_file = file_system.OpenInputFile(path).ValueOrDie();
    std::shared_ptr <arrow::ipc::feather::Reader> feather_reader = arrow::ipc::feather::Reader::Open(input_file).ValueOrDie();
    auto t1 = std::chrono::high_resolution_clock::Now();
    arrow::Status temp_status = feather_reader -> Read(feather_table);
    auto t2 = std::chrono::high_resolution_clock::Now();
    auto ms_int = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
    std::cout << "Time taken to read file is : "<< ms_int.count()<< "ms\n";
    return;
}

解决方法

使用 arrow::io::MemoryMappedFile 代替文件系统 API。 (您可以使用 arrow::io::MemoryMappedFile::Create 打开文件)目前没有打开内存映射文件的文件系统。 MemoryMappedFile 扩展了 arrow::io::InputStream,因此您可以将其传递给 arrow::ipc::feather::Reader::Open

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?