作为PIG脚本的一部分,我需要获取使用UDF生成的XML,并且XML太大(大约1.5GB)。目前我使用下面的代码将XML转换为String
StringWriter sw = new StringWriter();
XMLWriter output = new XMLWriter(sw, xmlFormat);
try {
output.write(document);
output.close();
} catch (IOException e) {}
return sw.toString();
这会抛出OutofMemoryError,因为StringWriter在内部使用字符串缓冲区,它依赖于Arrays.As Arrays使用整数作为索引,XML的长度超出了int范围。
有没有办法将这个大的xml转换为String并将其发送回pig脚本?或者我们能否以任何其他方式实现它。
仅供参考 - 我们正在使用dom4j(org.dom4j.Document
)来处理XML
UPDATE1: 我尝试下面的代码,我现在能够存储800 MB但仍然是1.5 GB的文件失败
ByteArrayOutputStream result = new ByteArrayOutputStream();
try {
XMLWriter output = new XMLWriter(result, xmlFormat);
output.write(document);
output.close();
return result.toString("UTF-8");
} catch (IOException e) {}