我们愿意用org.apache.orc.Writer创建orc文件。我们的测试是正常的,直到包含blob的更大的数据库表创建orc文件为止。我们试图更改以下设置,但这两种设置都没有帮助:
org.apache.orc.OrcFile.WriterOptions:
bufferSize()
stripeSize()
blockSize()
enforceBufferSize()Orc作者正在获取所有的数据集,只有当它完成后,写出它们,这种行为就会导致较大数据集上的内存问题。是否有一种方法可以连续填充ORC文件(从内存中连续刷新),而不是在关闭文件编写器时从内存中清除数据?从数据源创建orc文件的最佳实践是什么,该数据源包含blobs,不能仅在内存中处理?
任何信息都将不胜感激!
谢谢。塔马斯
发布于 2022-09-01 18:49:29
我知道这是一个非常老的问题,但我会给出我的解决方案,任何其他有相同的问题。
结果是,ORCWriter实现检查内存限制以每n行刷新缓冲区,但是如果您的行足够大到足以在完成检查之前消耗整个内存,那么OOM错误就会出现。因此,也许您应该尝试在内存检查/刷新之间设置一个较小的行计数。默认值是5000。
var configuration = new Configuration();
configuration.set(OrcConf.ROWS_BETWEEN_CHECKS.getAttribute(), String.valueOf(1000));
var options = OrcFile.writerOptions(configuration)
.stripeSize(stripeSize)
.setSchema(schema);https://stackoverflow.com/questions/45798011
复制相似问题