2014-11-08 4 views
0

ruby ​​스크립트를 사용하여 freebase 덤프를 더 작은 압축 파일로 나눈 다음 freebase-rdf-2014-10-26-00-00으로 작업을 중단하고 조기에 종료합니다. 오늘 저는 루비와 같은 방식으로 작동하는 자바 프로그램을 작성했습니다. 압축과 관련하여 freebase 덤프가 변경 되었습니까?최신 freebase 덤프를 분할 할 수 없습니다.

package splitfreebase; 

import java.io.*; 
import java.util.zip.GZIPInputStream; 

/** 
* 
* @author ron 
*/ 
public class SplitFreebase { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    try { 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(
         new GZIPInputStream(
           new FileInputStream(args[0])))); 

     BufferedWriter out = null; 

     long cnt = 0; 
     int file_cnt = 0; 

     while (in.ready()) { 
      if ((cnt % 10000000) == 0) { 
       String name = args[0].substring(0, args[0].length() - 3) 
         + "_" + file_cnt + ".gz"; 

       if (out != null) { 
        out.close(); 
       } 
       out = new BufferedWriter(
         new OutputStreamWriter(
           new GZIPOutputStream(
             new FileOutputStream(name)))); 
       file_cnt++; 
      } 

      if (out != null) { 
       out.write(in.readLine()); 
       out.newLine(); 
      } 

      cnt++; 
     } 

     if (out != null) { 
      out.close(); 
     } 

     in.close(); 

    } catch (FileNotFoundException ex) { 
     Logger.getLogger(SplitFreebase.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(SplitFreebase.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 

} 
+0

분할 방법이나 실패 모드에 관한 정보는 포함하지 않지만 묻지 말아야 할 질문이나 Freebase 팀에보고해야하는 버그와 관련이 없습니다 Google. –

+0

프로그램 문제라고 생각하지 않습니다. 루비와 자바가 동일한 알고리즘을 사용하고 파일이 커지면 자바가 깨지기 쉽다. 28425065218 Aug 10 14:40 freebase-rdf-2014-08-10-00-00.gz 작동, 최신 버전은 29498770878 11 월 2 일 18:13 freebase-rdf-2014-11-02-00-00.gz – ron

답변

0

아주 잘 작동합니다. 자바는 실패했고 루비도 똑같은 방식으로 실패했습니다. 나는 gunzip STDIN을 대체하는 문제를 나누었고 지금은 작동한다.

하는 Freebase 파일 : -rw-R - r--로 1 론 사용자 29498770878 년 11 월 2 18시 13분 유리 염기-RDF-2014-11-02-00-00.gz 여기

$ gunzip -c freebase_s19.gz | ./free_sp_stdin.rb howdy_pardner 

입니다 스크립트. 나는 루비 프로그래머가 아니며 우아하지 않을 수도있다.

require 'zlib' 

file_cnt = 0; 
error = "" 
wgz = nil 

if ARGV[1] != nil 
    file_cnt = ARGV[1].to_i; 
end 

base_name = ARGV[0] 

STDIN.each_with_index do |line, idx| 

#puts idx.to_s+" "+line 

if((idx % 100000000) == 0) 
    if(idx != 0) 
    wgz.close 
    end 

    wgz = Zlib::GzipWriter.open(base_name + file_cnt.to_s + ".gz") 
    puts base_name + file_cnt.to_s + ".gz" 
    file_cnt+=1 
end 

if((idx % 1000000) == 0) 
    print "." 
end 

error = line 
wgz << line 

end 

wgz.close 
puts error 
관련 문제