Ich habe eine große Sequenzdatei mit rund 60 Millionen Einträge (fast 4,5 GB). Ich möchte es teilen. Zum Beispiel möchte ich es in drei Teile mit jeweils 20 Millionen Einträgen aufteilen. Bisher ist mein Code wie folgt aus:Wie teilt man eine große Sequenzdatei in mehrere Sequenzdateien auf?
//Read from sequence file
JavaPairRDD<IntWritable,VectorWritable> seqVectors = sc.sequenceFile(inputPath, IntWritable.class, VectorWritable.class);
JavaPairRDD<IntWritable,VectorWritable> part=seqVectors.coalesce(3);
part.saveAsHadoopFile(outputPath+File.separator+"output", IntWritable.class, VectorWritable.class, SequenceFileOutputFormat.class);
Aber leider jede der erzeugten Sequenzdateien ist um 4 GB zu (insgesamt 12 GB)! Kann jemand einen besseren/gültigen Ansatz vorschlagen?
was Sie getan haben, ist der Weg zu gehen IMHO. Wenn Sie möchten, dass Dateien die gleiche Größe haben, verwenden Sie die Partition anstelle von –
, aber die Neupartitionierung gibt einen Fehler -> 17/05/03 23:10:46 ERROR executor.Executor: Ausnahme in Aufgabe 1.0 in Stufe 0.0 (TID 1) com.esotericsoftware.kryo.KryoException: java.util.ConcurrentModificationException Serialisierung Spur: Klassen (sun.misc.Launcher $ AppClassLoader) classloader (org.apache.hadoop.mapred.JobConf) conf (org.apache.mahout .math.VectorWritable) ---- Detailspur ---> https://pastebin.com/eDWvV6Fx @TalJoffe – user3086871
Ich denke, das Problem liegt im Mischen, denn wenn ich koalesce (3, wahr) das gleiche Problem ist geworfen! – user3086871