Manipulation de Big Data pour le plaisir et le profit Partie 2

Manipulation de Big Data pour le plaisir et le profit Partie 2

Dans la première partie de cette série de manipulation de Big Data - que vous voudrez peut-être lire d'abord si vous ne les lisez pas encore; Manipulation de Big Data pour le plaisir et le profit PARTIE 1 - Nous avons discuté beaucoup les différentes terminologies et certaines des idées entourant les mégadonnées, ou plus spécifiquement en ce qui concerne la manipulation, la transformation, le mangage, la munite, l'analyse, la dispute, la transformation et la manipulation du données. Souvent, ces termes sont utilisés de manière interchangeable et souvent leur utilisation se chevauche. Nous avons également examiné le premier ensemble d'outils bash qui peuvent nous aider avec le travail lié à ces termes.

Cet article explorera un autre ensemble d'outils de bash qui peuvent nous aider lors du traitement et de la manipulation de Big Data à base de texte (ou dans certains cas binaires). Comme mentionné dans l'article précédent, la transformation des données en général est un sujet semi-débutant car il existe des centaines d'outils pour chaque format de texte particulier. N'oubliez pas que l'utilisation des outils bash peut parfois ne pas être la meilleure solution, car un outil standard peut faire un meilleur travail. Cela dit, cette série est spécifiquement pour toutes ces (nombreuses) autres fois où aucun outil n'est disponible pour obtenir vos données au format de votre choix.

Et, si vous voulez savoir pourquoi la manipulation des mégadonnées peut être à la fois rentable et amusante… veuillez lire la partie 1 en premier.

Dans ce tutoriel, vous apprendrez:

  • Plus de mégadonnées en train de taper / l'analyse / manutention / manipulation / transformation des techniques
  • Quels outils bash sont disponibles pour vous aider, en particulier pour les applications de texte
  • Exemples montrant différentes méthodes et approches
Manipulation de Big Data pour le plaisir et le profit Partie 2

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Autre Toute utilité qui n'est pas incluse dans le shell bash par défaut peut être installée en utilisant Sudo Apt-Get Install Utility-Name (ou Installation de miam pour les systèmes basés sur Redhat)
Conventions # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié


Exemple 1: awk

Pour en revenir aux données que nous avons utilisées dans notre premier article de cette série (une petite partie téléchargée de la base de données Wikipedia), nous pouvons utiliser AWK pour commencer à manipuler les données:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 269019710: 31197816: Linux est mon ami $ grep '31197816' Enwiki-Latest-pages-Articles-Multistream-Index19.TXT-P30121851P31308442 | awk 'print $ 2' est 

Nous avons d'abord salué un élément spécifique dans le fichier de base de données de texte plat. Une fois que nous avons eu la sortie (269019710: 31197816: Linux est mon ami), nous avons ensuite essayé d'imprimer la deuxième colonne en utilisant l'instruction imprimer 2 $ (Imprimez la deuxième colonne) à awk, Mais cela a échoué, rendant Est. La raison en est que le awk L'utilitaire par défaut utilisera Whitespace (espace ou onglet) car son séparateur. Nous pouvons confirmer cela en lisant le manuel (homme awk), ou simplement en testant;

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

Dans la première ligne, nous insérons un onglet d'expression régulière (regex) (\ t) dans la sortie à générer par écho Et nous permettons une syntaxe d'expression régulière en spécifiant -e pour écho. Si vous souhaitez en savoir plus sur les expressions régulières dans Bash et ailleurs, veuillez consulter le bash Regexps pour les débutants avec des exemples, le bash avancé regex avec des exemples et les expressions régulières de Python semi-liées avec des exemples.

Par la suite, nous utilisons à nouveau awk Pour imprimer la deuxième colonne imprimer 2 $ et voir que la sortie cette fois est correcte. Enfin, nous testons avec "et voyons à nouveau correctement la sortie comme test2. Nous pouvons également voir dans notre ancien exemple que le texte 269019710: 31197816: Linux et Est est séparé par un espace - qui correspond au fonctionnement de awk. Les informations détaillées sur le fonctionnement de awk est utile ici, car les données sont souvent formatées de différentes manières. Vous pouvez voir des espaces, des onglets, des colons, des demi-colons et d'autres symboles utilisés comme séparateurs de champ. Et il devient encore plus complexe lorsqu'il s'agit de HTML, XML, JSON, MD, etc. formats.

Changeons le séparateur en utilisant le -F option de awk:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | awk -f ': "print $ 2' 31197816 

Exactement ce dont nous avons besoin. -F est décrit dans le awk manuel comme le séparateur de champ de saisie. Vous pouvez voir comment utiliser awk pour imprimer diverses colonnes perçues dans les données (vous pouvez simplement échanger le 2 $ pour 3 $ Pour imprimer la troisième colonne, etc.), afin que nous puissions le traiter plus loin dans le format que nous aimons. Allons, pour rassembler, changer l'ordre des champs et laisser tomber un champ dont nous ne pensons pas avoir besoin:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | awk -f ': "print $ 3" ​​\ t "$ 2'> out $ cat out linux est mon ami 31197816 


Super! Nous avons changé l'ordre des colonnes 2 et 3, et envoyé la sortie dans un nouveau fichier, et changé le séparateur en un languette (Grace à "\ t" insérer dans la déclaration d'impression). Si nous traitons maintenant simplement le fichier entier:

$ awk -f ': "print $ 3" ​​\ t "$ 2' enwiki-latest-pages-articles-mulStream-index19.TXT-P30121851P31308442> OUT $ 

L'ensemble des données d'entrée est structurellement modifiée au nouveau format! Bienvenue dans le monde amusant de la manipulation des mégadonnées. Vous pouvez voir comment avec quelques commandes de bash simple, nous sommes en mesure de restructurer / modifier considérablement le fichier comme nous considérons. J'ai toujours trouvé Frapper Pour se rapprocher de l'ensemble d'outils idéal pour la manipulation des mégadonnées, combinée avec des outils standard et peut-être le codage Python. L'une des principales raisons à cela est la multitude d'outils disponibles en bash qui facilitent la manipulation des mégadonnées.

Voyons ensuite notre travail

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 est mon ami 31197816 

Super - Le même nombre de lignes est là dans le fichier d'origine et du fichier modifié. Et l'exemple spécifique que nous avons utilisé précédemment est toujours là. Tout bon. Si vous le souhaitez, vous pouvez creuser un peu plus loin avec des commandes comme diriger et queue Contre les deux fichiers pour vérifier les lignes sembler correctement modifiées à tous les niveaux.

Vous pouvez même essayer d'ouvrir le fichier dans votre éditeur de texte préféré, mais je recommanderais personnellement vi Comme le nombre de lignes peut être important, et tous les éditeurs de texte ne traitent pas bien. vi prend un certain temps à apprendre, mais c'est un voyage qui vaut la peine d'être pris. Une fois que vous êtes bon avec vi, Vous ne regarderez jamais en arrière - il grandit sur vous pour ainsi dire.

Exemple 2: tr

Nous pouvons utiliser le tr Utilité pour traduire ou supprimer certains caractères:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr ': "\ t' 269019710 31197816 Linux est mon ami 

Ici, nous changeons notre côlon séparateur de champ (:) à l'onglet (\ t). Facile et simple, et la syntaxe parle de lui-même.

Vous pouvez aussi utiliser tr Pour supprimer n'importe quel personnage:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr -d ':' | tr -d '[0-9]' Linux est mon ami 


Vous pouvez voir comment nous avons supprimé : de la sortie en utilisant la suppression (-d) Option de tr, Et ensuite, nous avons supprimé - en utilisant une expression régulière - n'importe quel nombre dans la plage 0-9 ([0-9]).

Notez comment la modification du :: pour \ t ne nous permet toujours pas d'utiliser awk sans modifier le séparateur de champ, car il y a maintenant les deux onglets (\ t) et des espaces dans la sortie, et les deux sont vus par défaut (en awk) comme séparateurs de champ. So l'impression 3 $ avec awk mène au premier mot (avant qu'un espace ne soit vu):

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr ': "\ t' | awk 'print $ 3' Linux 

Cela souligne également pourquoi il est toujours très important de tester, de retester et de tester à nouveau toutes vos expressions régulières et transformations / manipuler les instructions de commande.

Conclusion

La multitude d'outils dans Bash rendent la manipulation des mégadonnées amusante et, dans certains cas, très facile. Dans ce deuxième article de la série, nous avons continué à explorer des outils bash qui peuvent nous aider dans la manipulation des mégadonnées.

Profitez du voyage, mais souvenez-vous de l'avertissement donné à la fin du premier article… Les mégadonnées peuvent sembler avoir un esprit propre, et il y a des dangers inhérents à travailler avec beaucoup de données (ou avec une surcharge d'entrée, comme quotidiennement vie), et ce sont (principalement) la surcharge de perception, la perfection excessive, le temps perdu et le cortex préfrontal (et d'autres zones cérébrales). Plus le projet, les données source ou le format cible sont complexes, plus le risque est grand. Parlant de beaucoup d'expérience ici.

Une bonne façon de contrer ces dangers est de fixer des limites de temps strictes à travailler avec des ensembles de données complexes et importants. Par exemple, 2 heures (à max) par jour. Vous serez surpris de ce que vous pouvez réaliser si vous mettez votre esprit sur deux heures dédiées, et ne le remenez pas, régulièrement. Ne dis pas que je ne t'ai pas prévenu 🙂

Faites-nous savoir vos réflexions ci-dessous - des ensembles de données, des stratégies de données intéressantes (à la fois techniques et style de vie / approche), et d'autres idées sont les bienvenues!

Tutoriels Linux connexes:

  • Manipulation des mégadonnées pour le plaisir et le profit Partie 3
  • Manipulation de Big Data pour le plaisir et le profit Partie 1
  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Masterring Bash Script Loops
  • Boucles imbriquées dans les scripts bash
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas