无法划分最新的freebase转储

时间:2014-11-08 20:12:10

标签: compression freebase

我使用ruby脚本将freebase转储分成较小的压缩文件,然后使用freebase-rdf-2014-10-26-00-00它停止工作,过早结束。今天我写了一个java程序,其行为与ruby相同。有关压缩的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);
    }

}

}

1 个答案:

答案 0 :(得分:0)

这非常有效。 Java失败了,ruby以完全相同的方式做了。我把问题替换为gunzip STDIN并且它现在有效。

Freebase文件: -rw-r - r-- 1 ron用户29498770878 11月2日18:13 freebase-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