2017-02-20 60 views
0

作爲PIG腳本的一部分,我需要獲取使用UDF生成的XML並且XML太大(大約1.5GB)。目前我使用下面的代碼,XML轉換爲字符串如何將大型XML轉換爲java中的字符串

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陣列使用整數索引和XML的長度超出了INT範圍。

有沒有辦法將這個大的xml轉換爲字符串並將其發送回豬腳本?或者我們能否以任何其他方式實現它。

僅供參考 - 我們正在使用的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) {} 
+1

AFAIK XML已經是基於文本的格式,所以它實際上已經是一個字符串。此外,我不知道爲什麼你要將它轉換爲字符串,也許問題在於你的推理。在任何情況下,您都可以:1)爲JVM分配更多內存或2)使用文件而不是字符串進行傳輸,然後在另一端讀取它。 – m0skit0

回答

0

爲避免內存用完,您需要流式傳輸xml文件。你可以用這個StreamingXMLLoader這個流,並直接在你的Pig腳本中解析你的xml。

相關問題