2017-02-20 6 views
0

PIG 스크립트의 일부로 UDF를 사용하여 생성 된 XML을 가져와야하고 XML이 너무 큽니다 (약 1.5GB). 현재 내가 내부 문자열 버퍼를 사용하는 문자열큰 XML을 Java의 문자열로 변환하는 방법

StringWriter sw = new StringWriter(); 
    XMLWriter output = new XMLWriter(sw, xmlFormat); 
    try { 
     output.write(document); 
     output.close(); 
    } catch (IOException e) {} 

    return sw.toString(); 

이것은 StringWriter를로 OutOfMemoryError가를 throw로 XML을 변환하는 코드 아래에 이용하고 있고 Arrays.As 배열은 인덱스에 대해 정수를 사용하여 XML의 길이가 INT 넘어에 따라 다르다 범위.

이 큰 xml을 String으로 변환하여 돼지 스크립트로 다시 보내는 방법이 있습니까? 또는 다른 방법으로 달성 할 수 있습니까? 참고로

- 우리가

갱신 1 처리 XMLS

에 대한 DOM4J (org.dom4j.Document)를 사용하는 : 을 나는 800메가바이트하지만 여전히 실패 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은 이미 텍스트 기반 형식이므로 실제로는 실제로 String입니다. 또한 나는 왜 그것을 정확하게 String으로 변환하려고하는지, 왜 당신의 추론에 문제가 있는지를 모른다. 어떤 경우 든, 1) JVM에 더 많은 메모리를 할당하거나 2) 전송을 위해 String 대신 파일을 사용하고 다른 쪽에서 읽을 수 있습니다. – m0skit0

답변

0

메모리 부족 현상을 방지하려면 xml 파일을 스트리밍해야합니다. StreamingXMLLoader에 해당 스트림을 사용하고 돼지 스크립트에서 직접 XML을 구문 분석 할 수 있습니다.