Big data-manipulatie voor plezier en winst Deel 2

  • Matthew Stevenson
  • 0
  • 2294
  • 669
>

In het eerste deel van deze serie manipulatie van big data - die je misschien eerst wilt lezen als je het nog niet hebt gelezen; Big Data Manipulation for Fun and Profit Part 1 - we hebben uitvoerig gesproken over de verschillende terminologieën en enkele ideeën rond big data, of meer specifiek met betrekking tot het verwerken, transformeren, mangelen, munging, parsing, wrangling, transformeren en manipuleren van de gegevens. Vaak worden deze termen door elkaar gebruikt en vaak overlapt het gebruik ervan. We hebben ook gekeken naar de eerste reeks Bash-tools die ons kunnen helpen met werk dat verband houdt met deze voorwaarden.

In dit artikel wordt een verdere reeks Bash-tools besproken die ons kunnen helpen bij het verwerken en manipuleren van op tekst gebaseerde (of in sommige gevallen binaire) big data. Zoals vermeld in het vorige artikel, is gegevenstransformatie in het algemeen een semi-eindeloos onderwerp, aangezien er honderden tools zijn voor elk specifiek tekstformaat. Onthoud dat het gebruik van Bash-tools soms niet de beste oplossing is, omdat een standaardgereedschap het misschien beter doet. Dat gezegd hebbende, deze serie is specifiek voor al die (vele) andere keren dat er geen tool beschikbaar is om uw gegevens in het formaat van uw keuze te krijgen.

En als u wilt weten waarom manipulatie van big data zowel winstgevend als leuk kan zijn ... lees dan eerst deel 1.

In deze tutorial leer je:

  • Meer big data wrangling / parsing / handling / manipulatie / transformatietechnieken
  • Welke Bash-tools zijn beschikbaar om u te helpen, specifiek voor op tekst gebaseerde applicaties
  • Voorbeelden van verschillende methoden en benaderingen
Big data-manipulatie voor plezier en winst Deel 2

Gebruikte softwarevereisten en -conventies

Softwarevereisten en Linux Command Line-conventies
Categorie Vereisten, conventies of gebruikte softwareversie
Systeem Linux-distributie-onafhankelijk
Software Bash-opdrachtregel, op Linux gebaseerd systeem
Andere Elk hulpprogramma dat niet standaard in de Bash-shell is opgenomen, kan worden geïnstalleerd met sudo apt-get install utility-name (of yum installeren voor op RedHat gebaseerde systemen)
Conventies # - vereist dat linux-commando's worden uitgevoerd met root-privileges, hetzij direct als rootgebruiker, hetzij door gebruik van sudo opdracht
$ - vereist dat linux-commando's worden uitgevoerd als een gewone niet-geprivilegieerde gebruiker

Voorbeeld 1: awk

Terugkomend op de gegevens die we in ons eerste artikel in deze serie hebben gebruikt (een klein gedownload deel van de Wikipedia-database), kunnen we awk gebruiken om de gegevens te manipuleren:

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 269019710: 31197816: Linux is mijn vriend $ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | awk 'print' Is 

Eerst grepen we naar een specifiek item in het platte tekstdatabasebestand. Zodra we de output hadden (269019710: 31197816: Linux is mijn vriend), hebben we vervolgens geprobeerd de tweede kolom af te drukken met behulp van de instructie print (print de tweede kolom) naar awk, maar dit mislukte, renderen Is. De reden hiervoor is dat de awk hulpprogramma gebruikt standaard witruimte (spatie of tab) als scheidingsteken. We kunnen dit bevestigen door de handleiding te lezen (man awk), of gewoon door te testen;

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

In de eerste regel voegen we een reguliere expressie (regex) tab (\ t) in de output die moet worden gegenereerd door echo en we schakelen de syntaxis van reguliere expressies in door -e naar echo. Als je meer wilt weten over reguliere expressies in Bash en elders, bekijk dan Bash Regexps voor beginners met voorbeelden, Advanced Bash Regex met voorbeelden en de semi-gerelateerde Python reguliere expressies met voorbeelden.

Vervolgens gebruiken we opnieuw awk om de tweede kolom af te drukken print en zorg ervoor dat de output deze keer correct is. Ten slotte testen we met "en zien we de uitvoer opnieuw correct als test2. We kunnen ook zien in ons vorige voorbeeld dat de tekst 269019710: 31197816: Linux en Is wordt gescheiden door een spatie - die overeenkomt met de werking van awk. De gedetailleerde informatie over de werking van awk is hier handig, omdat gegevens vaak op verschillende manieren worden opgemaakt. Mogelijk ziet u dat spaties, tabs, dubbele punten, puntkomma's en andere symbolen worden gebruikt als scheidingstekens voor velden. En het wordt nog ingewikkelder als het gaat om HTML-, XML-, JSON-, MD enz. Formaten.

Laten we het scheidingsteken wijzigen door de -F. optie om awk:

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | awk -F ': "print' 31197816 

Precies wat we nodig hebben. -F. wordt beschreven in de awk handleiding als het invoerveldscheidingsteken. U kunt zien hoe u awk gebruikt om verschillende kolommen af ​​te drukken die in de gegevens worden waargenomen (u kunt eenvoudig het naar om de derde kolom af te drukken, enz.), zodat we het verder kunnen verwerken in het formaat dat we leuk vinden. Laten we, om naar boven af ​​te ronden, de volgorde van de velden wijzigen en een veld laten vallen waarvan we denken dat we het niet nodig hebben:

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | awk -F ': "print" \ t "'> out $ cat out Linux Is My Friend 31197816 


Super goed! We hebben de volgorde van de kolommen 2 en 3 gewijzigd en de uitvoer naar een nieuw bestand gestuurd en het scheidingsteken gewijzigd in een tabblad (dankzij de "\ t" invoegen in het print statement). Als we nu gewoon het hele bestand verwerken:

$ awk -F ': "print" \ t "' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442> out $ 

Alle invoergegevens worden structureel gewijzigd naar het nieuwe formaat! Welkom in de leuke wereld van big data-manipulatie. Je kunt zien hoe we met een paar simpele Bash-commando's in staat zijn om het bestand substantieel te herstructureren / wijzigen naar eigen goeddunken. Ik heb altijd gevonden Bash om het dichtst bij de ideale toolset voor big data-manipulatie te komen, gecombineerd met enkele standaard tools en misschien Python-codering. Een van de belangrijkste redenen hiervoor is de veelheid aan tools die beschikbaar zijn in Bash die het manipuleren van big data gemakkelijker maken.

Laten we vervolgens ons werk verifiëren

wc -l enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 329956 enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 $ wc -l uit 329956 uit $ grep '31197816' uit Linux Is My Vriend 31197816 

Geweldig - hetzelfde aantal regels is aanwezig in het originele en het gewijzigde bestand. En het specifieke voorbeeld dat we eerder hebben gebruikt, is er nog steeds. Alles goed. Als je wilt, kun je een beetje verder graven met commando's zoals hoofd en staart tegen beide bestanden om te controleren of de regels er over de hele linie correct veranderd uitzien.

U kunt zelfs proberen het bestand in uw favoriete teksteditor te openen, maar ik zou het persoonlijk aanbevelen vi aangezien het aantal regels groot kan zijn, en niet alle teksteditors hier goed mee omgaan. vi duurt even om te leren, maar het is een reis die de moeite waard is. Als je er eenmaal goed in bent vi, je zult nooit meer terugkijken - het groeit zogezegd aan je toe.

Voorbeeld 2: tr

We kunnen de tr hulpprogramma om enkele tekens te vertalen of te verwijderen:

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | tr ': "\ t' 269019710 31197816 Linux is mijn vriend 

Hier veranderen we ons veldscheidingsteken dubbele punt (:) naar tab (\ t). Eenvoudig en duidelijk, en de syntaxis spreekt voor zich.

Je kan ook gebruiken tr om een ​​willekeurig teken te verwijderen:

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | tr -d ':' | tr -d '[0-9]' Linux is mijn vriend 


U kunt zien hoe we het eerst hebben verwijderd : van de uitvoer met behulp van de delete (-d) optie om tr, en vervolgens hebben we - met behulp van een reguliere expressie - elk nummer in het bereik 0-9 verwijderd ([0-9]).

Merk op hoe u de :: naar \ t stelt ons nog steeds niet in staat om awk te gebruiken zonder het veldscheidingsteken te wijzigen, aangezien er nu beide tabbladen zijn (\ t) en spaties in de uitvoer, en beide worden standaard gezien (in awk) als veldscheidingstekens. Dus printen met awk leidt naar alleen het eerste woord (voordat een spatie wordt gezien):

$ grep '31197816' enwiki-nieuwste-pagina's-artikelen-multistream-index19.txt-p30121851p31308442 | tr ': "\ t' | awk 'print' Linux 

Dit laat ook zien waarom het altijd erg belangrijk is om al uw reguliere expressies en data-transformerende / manipulerende opdrachtinstructies te testen, opnieuw te testen en opnieuw te testen.

Gevolgtrekking

De veelheid aan tools in Bash maken het manipuleren van big data leuk en in sommige gevallen heel gemakkelijk. In dit tweede artikel in de serie gingen we verder met het verkennen van Bash-tools die ons kunnen helpen bij het manipuleren van big data.

Geniet van de reis, maar onthoud de waarschuwing aan het einde van het eerste artikel ... Big data kan een eigen mening lijken te hebben, en er zijn inherente gevaren verbonden aan het werken met veel data (of met overbelasting van de invoer, zoals in dagelijkse leven), en dit zijn (voornamelijk) overbelasting van de perceptie, overbereik van perfectie, verloren tijd en overmatig gebruik van de prefrontale cortex (en andere hersengebieden). Hoe complexer het project, de brongegevens of het doelformaat, hoe groter het risico. Uit ervaring hier gesproken.

Een goede manier om deze gevaren tegen te gaan, is door strikte tijdslimieten te stellen aan het werken met complexe en grote datasets. Bijvoorbeeld 2 uur (maximaal) per dag. Je zult versteld staan ​​van wat je kunt bereiken als je je op een toegewijde twee uur richt en er niet consequent overheen gaat. Zeg niet dat ik je niet heb gewaarschuwd :)

Laat ons hieronder uw mening weten - interessante grote datasets, strategieën (zowel technisch als lifestyle / aanpak) en andere ideeën zijn welkom!




Niemand heeft nog op dit artikel gereageerd.

Een verzameling nuttige informatie over het Linux-besturingssysteem en nieuwe technologieën
Nieuwe artikelen, praktische tips, gedetailleerde recensies en handleidingen. Voel je thuis in de wereld van het Linux-besturingssysteem