Website-Suche

Big Data Manipulation zum Spaß und Profit Teil 2


Im ersten Teil dieser Serie über Big-Data-Manipulation – die Sie vielleicht zuerst lesen möchten, wenn Sie sie noch nicht gelesen haben; Big Data-Manipulation zum Spaß und zum Profit Teil 1 – Wir haben ausführlich die verschiedenen Terminologien und einige der Ideen rund um Big Data diskutiert, oder genauer gesagt, in Bezug auf die Handhabung, Transformation, Verzerrung, Munging, Parsing, Wrangling, Transformation und Manipulation der Daten. Oft werden diese Begriffe synonym verwendet und oft überschneidet sich ihre Verwendung. Wir haben uns auch die ersten Bash-Tools angesehen, die uns bei der Arbeit im Zusammenhang mit diesen Begriffen helfen können.

In diesem Artikel wird eine weitere Reihe von Bash-Tools vorgestellt, die uns bei der Verarbeitung und Manipulation von textbasierten (oder in einigen Fällen binären) Big Data helfen können. Wie im vorherigen Artikel erwähnt, ist die Datentransformation im Allgemeinen ein halbendloses Thema, da es Hunderte von Tools für jedes einzelne Textformat gibt. Denken Sie daran, dass die Verwendung von Bash-Tools manchmal nicht die beste Lösung ist, da ein Standardtool möglicherweise bessere Arbeit leistet. Das heißt, diese Serie ist speziell für all die (vielen) anderen Zeiten, in denen kein Tool verfügbar ist, um Ihre Daten in dem Format Ihrer Wahl zu erhalten.

Und wenn Sie erfahren möchten, warum Big-Data-Manipulation sowohl profitabel als auch unterhaltsam sein kann... bitte lesen Sie zuerst Teil 1.

In diesem Tutorial lernen Sie:

  • Weitere Big Data Wrangling/Parsing/Handling/Manipulation/Transformationstechniken
  • Welche Bash-Tools stehen zur Verfügung, um Ihnen zu helfen, speziell für textbasierte Anwendungen?
  • Beispiele für unterschiedliche Methoden und Vorgehensweisen

Big Data Manipulation zum Spaß und Profit Teil 2

Verwendete Softwareanforderungen und Konventionen

Beispiel 1: awk

Wenn wir auf die Daten zurückkommen, die wir in unserem ersten Artikel in dieser Serie verwendet haben (ein kleiner heruntergeladener Teil der Wikipedia-Datenbank), können wir awk verwenden, um mit der Manipulation der Daten zu beginnen:

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
269019710:31197816:Linux Is My Friend
grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk '{print $2}'
Is

Zuerst haben wir nach einem bestimmten Element in der flachen Textdatenbankdatei gesucht. Sobald wir die Ausgabe hatten (269019710:31197816:Linux Is My Friend), haben wir dann versucht, die zweite Spalte zu drucken, indem wir die Anweisung {print $2} (print the second column) zu awk verwendet haben, aber dies schlug fehl und renderte Is. Der Grund dafür ist, dass das awk-Dienstprogramm standardmäßig Leerzeichen (Leerzeichen oder Tabulatoren) als Trennzeichen verwendet. Wir können dies bestätigen, indem wir das Handbuch lesen (man awk) oder einfach testen;

echo -e 'test1\ttest2'
test1   test2
echo -e 'test1\ttest2' | awk '{print $2}'
test2
echo -e 'test1 test2' | awk '{print $2}'
test2

In der ersten Zeile fügen wir einen regulären Ausdruck (Regex) Tabulator (\t) in die Ausgabe ein, die von echo generiert werden soll, und wir aktivieren die Syntax regulärer Ausdrücke, indem wir -e für echo angeben. Wenn Sie mehr über reguläre Ausdrücke in Bash und anderswo erfahren möchten, lesen Sie bitte Bash Regexps für Anfänger mit Beispielen, Fortgeschrittene Bash Regex mit Beispielen und die semi-verwandten Python Regular Expressions mit Beispielen.

Anschließend verwenden wir wieder awk, um die zweite Spalte {print $2} zu drucken und sehen, dass die Ausgabe diesmal korrekt ist. Zum Schluss testen wir mit ' ' und sehen die Ausgabe wieder korrekt als test2. Wir können auch in unserem vorherigen Beispiel sehen, dass der Text 269019710:31197816:Linux und Is durch ein Leerzeichen getrennt ist – was der Funktionsweise von awk entspricht. Hilfreich sind hier die detaillierten Informationen über die Funktionsweise von awk, da Daten oft auf unterschiedliche Weise formatiert sind. Möglicherweise werden Leerzeichen, Tabulatoren, Doppelpunkte, Semikolons und andere Symbole als Feldtrennzeichen verwendet. Und noch komplexer wird es, wenn es um die Formate HTML, XML, JSON, MD usw. geht.

Lassen Sie uns das Trennzeichen ändern, indem wir die Option -F verwenden, um awk zu verwenden:

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk -F':' '{print $2}'
31197816

Genau das, was wir brauchen. -F ist im awk-Handbuch als Eingabefeldtrenner beschrieben. Sie können sehen, wie Sie awk verwenden, um verschiedene Spalten zu drucken, die in den Daten wahrgenommen werden (Sie können einfach die 2 $ gegen 3 $ austauschen, um die dritte Spalte zu drucken usw.), damit wir sie weiter in das Format verarbeiten können, das wir möchten. Um abzurunden, ändern wir die Reihenfolge der Felder und lassen ein Feld weg, von dem wir glauben, dass wir es nicht brauchen:

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk -F':' '{print $3"\t"$2}' > out
cat out
Linux Is My Friend  31197816

Großartig! Wir haben die Reihenfolge der Spalten 2 und 3 geändert und die Ausgabe in eine neue Datei gesendet und das Trennzeichen in einen Tabulator geändert (dank der Einfügung "\t" in der print-Anweisung). Wenn wir jetzt einfach die ganze Datei verarbeiten:

awk -F':' '{print $3"\t"$2}' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 > out

Die gesamten Eingabedaten werden strukturell auf das neue Format umgestellt! Willkommen in der unterhaltsamen Welt der Big-Data-Manipulation. Sie können sehen, wie wir mit ein paar einfachen Bash-Befehlen in der Lage sind, die Datei nach eigenem Ermessen grundlegend umzustrukturieren/zu ändern. Ich habe immer festgestellt, dass Bash dem idealen Toolset für die Manipulation von Big Data am nächsten kommt, kombiniert mit einigen handelsüblichen Tools und vielleicht Python-Codierung. Einer der Hauptgründe dafür ist die Vielzahl der in Bash verfügbaren Tools, die die Manipulation von Big Data erleichtern.

Lassen Sie uns als Nächstes unsere Arbeit überprüfen

wc -l enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
329956 enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
wc -l out
329956 out
grep '31197816' out
Linux Is My Friend  31197816

Großartig – die gleiche Anzahl von Zeilen ist in der ursprünglichen und der geänderten Datei vorhanden. Und das konkrete Beispiel, das wir zuvor verwendet haben, ist immer noch da. Alles gut. Wenn Sie möchten, können Sie mit Befehlen wie head und tail gegen beide Dateien etwas weiter graben, um zu überprüfen, ob die Linien auf der ganzen Linie korrekt verändert aussehen.

Sie könnten sogar versuchen, die Datei in Ihrem bevorzugten Texteditor zu öffnen, aber ich persönlich würde vi empfehlen, da die Anzahl der Zeilen groß sein kann und nicht alle Texteditoren gut damit umgehen. Es dauert eine Weile, bis man Vi lernt, aber es ist eine Reise, die es wert ist, unternommen zu werden. Wenn du einmal gut mit vi zurechtkommst, wirst du nie wieder zurückblicken – es wächst dir sozusagen ans Herz.

Beispiel 2: tr

Wir können das Dienstprogramm tr verwenden, um einige Zeichen zu übersetzen oder zu löschen:

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr ':' '\t'
269019710   31197816    Linux Is My Friend

Hier ändern wir unser Feldtrennzeichen Doppelpunkt (:) in Tabulator (\t). Einfach und unkompliziert, und die Syntax spricht für sich.

Sie können auch tr verwenden, um ein beliebiges Zeichen zu löschen:

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr -d ':' | tr -d '[0-9]'
Linux Is My Friend

Sie können sehen, wie wir zuerst : aus der Ausgabe entfernt haben, indem wir die Option delete (-d) auf tr verwendet haben, und als nächstes haben wir – mit einem regulären Ausdruck – eine beliebige Zahl im Bereich von 0-9 ([0-9]) entfernt.

Beachten Sie, dass das Ändern von :: in \t es uns immer noch nicht ermöglicht, awk zu verwenden, ohne das Feldtrennzeichen zu ändern, da es jetzt sowohl Tabulatoren (\t) als auch Leerzeichen in der Ausgabe gibt und beide standardmäßig (in awk) als Feldtrennzeichen angesehen werden. Das Drucken von $3 mit awk führt also nur zum ersten Wort (bevor ein Leerzeichen zu sehen ist):

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr ':' '\t' | awk '{print $3}'
Linux

Dies unterstreicht auch, warum es immer sehr wichtig ist, alle Ihre regulären Ausdrücke und Befehlsanweisungen zur Datentransformation/-manipulation zu testen, erneut zu testen und erneut zu testen.

Schlussfolgerung

Die Vielzahl an Tools in Bash macht die Manipulation von Big Data zum Spaß und in einigen Fällen sehr einfach. In diesem zweiten Artikel der Serie haben wir uns mit Bash-Tools beschäftigt, die uns bei der Manipulation von Big Data helfen können.

Genießen Sie die Reise, aber denken Sie an die Warnung am Ende des ersten Artikels... Big Data scheint einen eigenen Kopf zu haben, und es gibt inhärente Gefahren bei der Arbeit mit vielen Daten (oder mit Eingabeüberlastung, wie im täglichen Leben), und dies sind (hauptsächlich) Wahrnehmungsüberlastung, Perfektionsüberforderung, Zeitverlust und Überbeanspruchung des präfrontalen Kortex (und anderer Gehirnbereiche). Je komplexer das Projekt, die Quelldaten oder das Zielformat, desto größer ist das Risiko. Ich spreche hier aus viel Erfahrung.

Eine gute Möglichkeit, diesen Gefahren entgegenzuwirken, besteht darin, strenge Zeitlimits für die Arbeit mit komplexen und großen Datensätzen festzulegen. Zum Beispiel 2 Stunden (maximal) pro Tag. Sie werden überrascht sein, was Sie erreichen können, wenn Sie sich zwei Stunden Zeit nehmen und diese nicht konsequent überschreiten. Sag nicht, ich hätte dich 🙂 nicht gewarnt

Teilen Sie uns unten Ihre Gedanken mit – interessante große Datensätze, Strategien (sowohl technisch als auch Lifestyle/Ansatz) und andere Ideen sind willkommen!

Verwandte Artikel: