Nach der Medline Abstract Satzzerlegung habe ich heute im Hadoop-Cluster doppelte Sätze eleminiert. Hierfür werden die Abstracts mit dem java.text.BreakIterator in Sätze zerlegt. Die erzeugten Sätze werden normalisiert. Für die normalisierten Sätze wird ein MD5 berechnet. In der Mapping-Phase werden alle Sätze mit ihrem MD5 als key rausgeschrieben. Die Reduce-Phase nimmt dann den ersten Satz zu dem key und schreibt diesen mit dem key wieder raus. Alle weiteren Sätze werden ignoriert. In einem Vergleich wird nicht der MD5-Algorithmus verwendet, sondern der SHA-512
Ergebnis
| Sätze insgesamt | MD5 | SHA-512 |
|---|---|---|
88.333.921¹ | 85.746.464 | 85.746.464 |
Bewertung
Keine Hash-Kollisionen - MD5 ist ausreichend. 2.587.457 Sätze kommen 2- oder mehrfach vor.
Benchmark
Es wurden 17.021.733 Medline Abstracts bearbeitet. Diese lagen in einer Eingabedatei von 11,92 GB. Berechnet wurde auch einem Hadoop-Cluster aus 7 Maschinen der Entry-Server Klasse (4 GB RAM, Xeon Quad-Core, da Dual-Cores nicht lieferbar war
, 500 GB Festplatte).
| MD5 | SHA-512 | |
|---|---|---|
| Dauer der Berechnung | 11 Minuten | 15 Minuten, 46 Sekunden |
| Reduce Output | 14,45 GB | 22,43 GB |
[¹] Leicht modifizierter satzzerlege Algorithmus gegenüber den Ergebnissen vom 2008-02-02.
