Website-Suche

Big Data Manipulation zum Spaß und Profit Teil 3


Es gab zwei frühere Artikel in dieser Serie, die Sie vielleicht zuerst lesen möchten, wenn Sie sie noch nicht gelesen haben; Big Data Manipulation zum Spaß und Profit Teil 1 und Big Data Manipulation zum Spaß und Profit Teil 2.

In dieser Serie diskutieren wir verschiedene Ideen und praktische Ansätze für den Umgang mit Big Data, genauer gesagt für den Umgang mit Big Data, genauer gesagt, das Transformieren, Verzerren, Munging, Parsen, Wrangling, Transformieren und Manipulieren der Daten auf der Linux-Befehlszeile.

In diesem dritten Artikel der Serie werden Bash-Tools untersucht, die uns bei der Verarbeitung und Manipulation von textbasierten (oder in einigen Fällen binären) Big Data helfen können. Wie in den vorherigen Artikeln 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.

Wenn Sie mehr darüber erfahren möchten, warum Big-Data-Manipulation sowohl Spaß machen als auch profitabel sein kann... bitte lesen Sie zuerst Teil 1.

In diesem Tutorial lernen Sie:

  • Zusätzliche Big-Data-Wrangling-/Parsing-/Handhabungs-/Manipulations-/Transformationstechniken
  • Welche Bash-Tools stehen zur Verfügung, um Sie zu unterstützen, speziell für textbasierte Anwendungen
  • Verschiedene Beispiele, die unterschiedliche Methoden und Vorgehensweisen aufzeigen

Big Data Manipulation zum Spaß und Profit Teil 3

Verwendete Softwareanforderungen und Konventionen

Beispiel 1: wc, head und vi – Erkundung von Daten

In diesem Beispiel arbeiten wir mit einer JSON-Statusdatei, die von Wikipedia als Teil ihrer Datendumps erstellt wurde (siehe einen beliebigen Ordner in https://dumps.wikimedia.org/enwiki/)

wget https://dumps.wikimedia.org/enwiki/20201020/dumpstatus.json
head -c100 dumpstatus.json 
{"version": "0.8", "jobs": {"pagerestrictionstable": {"status": "done", "files": {"enwiki-20201020-p
wc -l dumpstatus.json
1

Der Befehl wget ruft die Datei für uns ab (dieser Befehl ist auch praktisch, wenn Sie eine große Menge von Datendateien herunterladen müssen und dies auf Ihrer Befehlszeile automatisieren möchten), und der head -c100 zeigt die ersten 100 Zeichen der Datei an. Dies ist eine großartige Möglichkeit, den oberen Kopf der Datei schnell zu überprüfen.

Wenn es sich bei der Datei um Binärdaten handelt, wird die Verwendung des Befehls head -c100 kein allzu großes Durcheinander in Ihrem Terminal verursachen, und wenn die Zeilen sehr lang sind (wie es bei dieser Datei der Fall ist), stellt dieser Befehl sicher, dass wir nicht viele Seiten mit Lauftext vorbeiziehen sehen.

Der Befehl wc -l zeigt uns die Anzahl der Zeilen an.

Bevor Sie mit Big Data arbeiten, ist es immer eine gute Idee, den Inhalt der Datei zu überprüfen, mit der Sie arbeiten. Ich persönlich benutze und bevorzuge vi, aber Sie können jeden Texteditor, der sich für Sie angenehm anfühlt. Einer der Vorteile von vi ist, dass es sich hervorragend zum Öffnen und Bearbeiten sehr großer Dateien eignet. Öffnen Sie die Datei und schauen Sie sich um: Wie lang sind die Zeilen, um welche Art von Daten handelt es sich usw.?

Interessant ist, dass vi, obwohl es eine große Lernkurve hat, auch sehr leistungsfähig ist, wenn es um Massenoperationen geht. Zum Beispiel kann es schneller sein, eine Datei mit einer Million Zeilen zu generieren, indem man einfach ein paar vi-Befehle in vi ausführt, als ein kleines Skript zu schreiben, um dasselbe zu tun. Ein großartiger Aspekt der Lernkurve von vi ist, dass sie tendenziell mit Ihnen wächst, wenn Sie zusätzliche Methoden oder Verfahren benötigen.

Außerdem haben wir mit nur zwei Befehlen (head -c100 und wc -l), dem Notieren des Dateinamens und dem schnellen Überprüfen mit vi bereits eine Vielzahl von Dingen gelernt:

  1. Hierbei handelt es sich um eine JSON-Datei (.json Erweiterung)
  2. Diese Datei hat sehr lange Zeile(n) (vi, drücken Sie die End-Taste und Notenzähler unten rechts, vorhanden auf vielen vi-Installationen): 110365 Zeichen
  3. Diese Datei hat eine einzige Zeile (wc -l)
  4. Die Datei ist stark strukturiert (head -c100)

Dies ist zwar ein einfaches Beispiel, aber die Idee ist, hervorzuheben, dass wir, wenn wir ein wenig Zeit damit verbringen, unsere Quelldaten zu recherchieren, leichter mit ihnen arbeiten und verstehen können, wie wir sie besser in das Format umwandeln oder manipulieren können, in dem wir sie gerne hätten. Dieser Ansatz oder diese Methodik sollte für den Data Engineer zur zweiten Natur werden.

Der nächste wichtige Teil des Big-Data-Manipulationsprozesses besteht darin, zu erkennen, welches Tool bei der anstehenden Aufgabe am meisten hilft. Wenn wir generische Extraktionen oder Manipulationen an diesen Daten vornehmen würden, würden wir wahrscheinlich zuerst nach einem JSON-kompatiblen Tool oder sogar nach einem Tool suchen, das speziell für JSON entwickelt wurde. Es gibt viele solcher Tools, darunter viele kostenlose und Open-Source-Tools.

Zwei gute Ausgangspunkte sind die Suche nach github.com (geben Sie z. B. "JSON edit" ein, um zu sehen, welche generischen Tools es gibt, oder etwas Spezifischeres wie "JSON Tree", um ein Tool zu finden, das spezifisch für die Revision des JSON-Baums ist) und jede große Suchmaschine. Es gibt mehr als 100 Millionen Repositories auf GitHub und Sie werden fast immer mindestens ein oder zwei Dinge finden, die sich direkt auf Ihre Aufgabe oder Ihr Projekt beziehen und möglicherweise dabei helfen.

Speziell für GitHub sollten Sie die Schlüsselwörter kurz und generisch halten, um die maximale Anzahl relevanter Übereinstimmungen zu erhalten. Denken Sie daran, dass GitHub zwar mehr als 100 Millionen Repositories hat, aber im Vergleich zu großen Suchmaschinen sehr klein ist und daher eine zu spezifische Suche (mehr als 2-3 Wörter oder detaillierte Wörter in beliebigem Umfang) oft zu schlechten oder gar keinen Ergebnissen führt.

"JSON" (für einen generischen Eindruck des kostenlosen "Marktplatzes"), "JSON edit" und "JSON tree" sind gute Beispiele. "JSON tree builder" und "JSON tree edit" sind grenzwertig und spezifischer als dies möglicherweise keine hilfreichen Ergebnisse liefert.

Für dieses Projekt tun wir so, als hätten wir alle verfügbaren JSON-Tools analysiert und keines gefunden, das für das, was wir tun wollten, geeignet ist: Wir wollen alle { in _ und " in = ändern und alle Leerzeichen entfernen. Diese Daten werden wir dann an unseren fiktiven KI-Roboter weitergeben, der so programmiert ist, dass er Fehler in JSON behebt. Wir möchten JSON kaputt machen, um zu sehen, ob der Roboter eine gute Leistung erbringt.

Als Nächstes transformieren wir einige dieser Daten und ändern die JSON-Syntax mit sed.

Beispiel 2: sed

Der Stream Editor (sed) ist ein leistungsstarkes Dienstprogramm, das für eine Vielzahl von Big-Data-Manipulationsaufgaben verwendet werden kann, insbesondere durch die Verwendung von regulären Ausdrücken (RegEx). Ich schlage vor, mit der Lektüre unseres Artikels Fortgeschrittenes Bash RegEx mit Beispielen oder Bash RegExps für Anfänger mit Beispielen zu beginnen, wenn Sie gerade erst mit sed und regulären Ausdrücken beginnen. Um ein wenig mehr über reguläre Ausdrücke im Allgemeinen zu erfahren, können Sie auch Python Regular Expressions with Examples von Interesse finden.

Gemäß unserem Vorgehensweiseplan werden wir alle { in _ und " in = ändern und alle Leerzeichen entfernen. Mit sed ist das ganz einfach zu bewerkstelligen. Zu Beginn nehmen wir eine kleine Stichprobe aus der größeren Datendatei, um unsere Lösung zu testen. Dies ist eine gängige Praxis beim Umgang mit großen Datenmengen, da man 1) sicherstellen möchte, dass die Lösung genau funktioniert, 2) bevor man die vorliegende Datei ändert. Lassen Sie uns testen:

echo ' {"status": "done' | sed 's|{|_|g;s|"|=|g'
 _=status=: =done

Großartig, es sieht so aus, als ob unsere Lösung teilweise funktioniert. Wir haben { in _ und " in = geändert, aber die Leerzeichen noch nicht entfernt. Schauen wir uns zuerst die sed-Anweisung an. Der Befehl s im gesamten sed-Befehl (gekapselt durch einfache Anführungszeichen) ersetzt ein Textbit durch ein anderes und ist für reguläre Ausdrücke geeignet. Wir haben also die beiden Charaktere, die wir ändern wollten, in einem Von-Bis-basierten Ansatz verändert. Wir haben die Änderung auch über die gesamte Eingabe vorgenommen, indem wir die Option g (global) auf sed gesetzt haben.

Mit anderen Worten, man könnte diesen sed-Befehl wie folgt schreiben: substitute|from|to|global oder s|f|t|g (in diesem Fall würde f durch t ersetzt werden). Lassen Sie uns als nächstes das Entfernen von Leerzeichen testen:

echo ' {"status": "done' | sed 's|{|_|g;s|"|=|g;s| *||g' 
_=status=:=done

Unser letzter Ersatzbefehl (s| *||g) enthält einen regulären Ausdruck, der eine beliebige Anzahl (*) von Leerzeichen verwendet und durch 'nichts' ersetzt (entsprechend dem leeren 'to'-Feld).

Wir wissen jetzt, dass unsere Lösung korrekt funktioniert, und wir können dies für die vollständige Datei verwenden. Gehen wir voran und tun wir das:

sed -i 's|{|_|g;s|"|=|g' dumpstatus.json

Hier verwenden wir die Option -i für sed und übergeben die Datei (dumpstatus.json) als Option am Ende der Zeile. Dadurch wird ein Inline-Befehl (-i) sed direkt auf der Datei ausgeführt. Es sind keine temporären oder zwischengeschalteten Dateien erforderlich. Wir können dann vi erneut verwenden, um zu überprüfen, ob unsere Lösung korrekt funktioniert hat. Unsere Daten sind jetzt bereit für unseren fiktiven KI-Roboter, um seine Fähigkeiten zur JSON-Reparatur zu zeigen!

Es ist auch oft eine gute Idee, sich schnell eine Kopie der Datei zu besorgen, bevor Sie mit der Arbeit daran beginnen, oder bei Bedarf mit einer temporären Datei zu arbeiten, obwohl Sie in diesem Fall vielleicht ein sed 's|...|...|' infile > outfile-basierter Befehl.

Zu lernen, wie man sed und reguläre Ausdrücke gut verwendet, hat viele Vorteile, und einer der Hauptvorteile besteht darin, dass Sie in der Lage sein werden, große Textdaten leichter zu verarbeiten, indem Sie sed verwenden, um sie zu transformieren/zu manipulieren.

Schlussfolgerung

Wenn Sie unsere beiden vorherigen Artikel in dieser Serie noch nicht gelesen haben und das Thema interessant finden, empfehle ich Ihnen dringend, dies zu tun. Die Links dazu finden Sie in der Einleitung oben. Ein Grund dafür ist die in den ersten beiden Artikeln hervorgehobene Warnung, Ihre Zeit und Ihr Engagement für Technologie zu verwalten, wenn es um den Umgang mit Big Data und/oder anderen komplexen IT-Themen im Allgemeinen, wie z. B. komplexen KI-Systemen, geht. Den Geist ständig zu belasten, führt tendenziell zu schlechten langfristigen Ergebnissen, und (übermäßig) komplexe Projekte neigen dazu, dies zu erreichen. In diesen Artikeln erfahren Sie auch mehr über andere Tools, die für die Bearbeitung von Big Data verwendet werden können.

In diesem Artikel haben wir erläutert, wie Data Engineers versuchen sollten, die Daten, an denen sie arbeiten, gut zu verstehen, damit die Transformation und Verwaltung einfacher und unkomplizierter wird. Wir haben uns auch verschiedene Tools angesehen, die uns helfen können, mehr über die Daten zu erfahren und sie zu transformieren.

Haben Sie interessante große Datensätze gefunden oder großartige Big-Data-Handling-Strategien entwickelt (technisch und/oder Lifestyle/Ansatz)? Wenn ja, hinterlassen Sie uns einen Kommentar!

Verwandte Artikel: