我使用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);
}
}
}
答案 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