首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Tablesaw读取excel会导致OutOfMemoryError

使用Tablesaw读取excel会导致OutOfMemoryError
EN

Stack Overflow用户
提问于 2020-06-18 09:45:23
回答 2查看 356关注 0票数 0

我使用以下api将excel中的数据读取为一个表:https://jtablesaw.github.io/tablesaw/gettingstarted

守则如下:

代码语言:javascript
运行
复制
XlsxReader reader = new XlsxReader();
        XlsxReadOptions options = XlsxReadOptions.builder("excel/file_example_XLSX_10.xlsx").build();
        try {
            tab = reader.read(options);
            // System.out.println(tab.print());
        } catch (Exception e) {
            e.printStackTrace();
}

文件file_example_XLSX_10.xlsx的大小约为120 mb,我正在获取OutOfMemoryError。

有没有办法让我只从文件中读取特定的列。

EN

回答 2

Stack Overflow用户

发布于 2020-06-18 09:52:25

我不认为有一种方法只读取某些列,您是否尝试过使用Apache来读取excel?还是在运行时增加内存?

票数 0
EN

Stack Overflow用户

发布于 2020-06-19 13:38:06

我不太熟悉Excel文件的读取,但是如果您可以将其导出为一个或多个CSV,下面是几点需要注意的内容:

1)您可以以最小化内存使用的方式读取文件。为了方便起见,表不使用最小的数字类型。它默认为int和double。您可以指定它尝试使用较少的内存,以便在给定数据合适的情况下使用短内存或浮点数。

代码语言:javascript
运行
复制
    Table t = Table.read()
       .csv(CsvReadOptions.builder("../myfile.csv")
          .minimizeColumnSizes()
    );

这可能也适用于Excel,因为它是在ReadOptions中定义的,而不是更具体的CsvReadOptions。

2)另外,对于CSV,您可以指定一个ColumnTypes数组,其中一个可以是ColumnType.SKIP,这也可以使用CsvReadOptions完成。

至少对于一个典型的桌面应用程序来说,150 at并不太大。我昨天读取了800 in的文件,没有问题,也没有触及IDEA中的JVM内存设置。OTOH,我不是最新版本的所以YMMV。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62447105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档