我的箭头编写器从 CSV 文件读取数据适用于小于 1 GB 的数据,但停留在这个限制附近(编写代码似乎被阻止)。我有足够的内存给进程(-Xmx12g),数据大小约为 1.2GB。具有较少行和大约 0.4 GB 的类似结构化文件可以使用相同的代码正常工作。
我只是想知道,如果 apache 箭头当前对创建的向量有一些限制,或者对行数有限制。
我的箭头编写器从 CSV 文件读取数据适用于小于 1 GB 的数据,但停留在这个限制附近(编写代码似乎被阻止)。我有足够的内存给进程(-Xmx12g),数据大小约为 1.2GB。具有较少行和大约 0.4 GB 的类似结构化文件可以使用相同的代码正常工作。
我只是想知道,如果 apache 箭头当前对创建的向量有一些限制,或者对行数有限制。
最好澄清一下它到底是如何失败的(我假设你看到了一个异常)。但要解决这个问题。
目前,每个包含向量的 Buffer 都有 2GB 的限制。此外,当前所有箭头向量都使用int
索引,因此行限制为 2^31-1。由于默认分配过程的工作方式(缓冲区大小加倍),您可能会在没有预分配的情况下接近实际限制。
一般来说,Arrow 的最佳实践尤其是 Java 是创建小批量(例如,读取 N 行将它们转换为批量并再次将它们写出,而不是尝试读取整个文件)。在最近重构的JDBC 适配器中可以看到这种方法的一个示例。
最近有关于更改 API 以支持 64 位索引/大小的开发人员邮件列表的讨论。