2012-11-14 99 views
2

我對豬拉丁文非常陌生,試圖通過我之前做過的有關Map Reduce的作業來了解Pig Latin。我得到GC開銷錯誤,PS:我的輸入只是10行簡單的csv文件。PigLatin:java.lang.OutOfMemoryError:超出GC開銷限制

我試圖將csv格式轉換爲arff。

我的UDF:

public class CSV2ARFF extends EvalFunc<String> { 
private String arffDataString; 
private String arffHeaderString; 

public String exec(Tuple input) throws IOException { 
    if (input == null || input.size() == 0) 
     return null; 
    try{ 
      System.out.println(">>> " + input.get(0).toString()); 
      // csv to instances 
      ByteArrayInputStream inputStream = new ByteArrayInputStream(input.get(0).toString().getBytes("UTF-8")); 
      CSVLoader loader = new CSVLoader();    
      loader.setSource(inputStream); 
      Instances data = loader.getDataSet(); //**Line #30** 
      //convert into arff 
      ArffSaver arff = new ArffSaver();    
      arff.setInstances(data);     
      this.arffDataString = arff.getInstances().toString();    
      Instances arffdata = arff.getInstances(); 
      // header 
      Instances header = new Instances(arffdata, 0); 
      this.arffHeaderString = header.toString(); 
      this.arffDataString = this.arffDataString.substring(this.arffHeaderString.length()); 

      return arffDataString; 

    }catch(Exception e){ 
     System.err.println("CSV2ARFF: failed to proces input; error - " + e.getMessage()); 
     return null; 
    } 
} 

}

我script.pig

REGISTER ./csv2arff.jar; 
REGISTER ./weka.jar; 

csvraw = LOAD 'sample' USING PigStorage('\n') as (c); 

arffraws = FOREACH csvraw GENERATE pighw2java.CSV2ARFF(c); 

--output 

STORE arffraws INTO 'output' using PigStorage(); 

錯誤

java.lang.OutOfMemoryError: GC overhead limit exceeded 
at java.nio.CharBuffer.wrap(CharBuffer.java:369) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:310) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:154) 
at java.io.BufferedReader.read(BufferedReader.java:175) 
at java.io.StreamTokenizer.read(StreamTokenizer.java:500) 
at java.io.StreamTokenizer.nextToken(StreamTokenizer.java:544) 
at weka.core.converters.ConverterUtils.getToken(ConverterUtils.java:888) 
at weka.core.converters.CSVLoader.readHeader(CSVLoader.java:937) 
at weka.core.converters.CSVLoader.readStructure(CSVLoader.java:578) 
at weka.core.converters.CSVLoader.getStructure(CSVLoader.java:563) 
at weka.core.converters.CSVLoader.getDataSet(CSVLoader.java:596) 
at pighw2java.CSV2ARFF.exec(CSV2ARFF.java:30) 
at pighw2java.CSV2ARFF.exec(CSV2ARFF.java:1) 
+0

可能重複的[豬JVM的Java堆空間錯誤](http://stackoverflow.com/questions/10822213/pig-jvm-java-heap-space-error) –

+0

@AndrewFinnell我已經看到那篇文章之前發佈我的問題和嘗試pig -Dpig.mapred.child.java.opts = -Xms2048M script1.pig 但1024和2048兩者都有同樣的錯誤 –

+0

將該進程設置爲2048後,該進程是否運行更長?頂級java進程也可能內存不足?你可以增加父母程序的Xmx大小,而不僅僅是豬的孩子。 –

回答

0

我遇到過類似的情況。 以本地模式運行豬導致此錯誤(pig -x local)。 當我在地圖縮減模式下運行相同的查詢時,它解決了(豬)。

希望它有幫助。

相關問題