Je voudrais utiliser hadoop pour traiter des fichiers CSV non structurés. Ces fichiers sont non structurés dans le sens où ils contiennent plusieurs valeurs de données de différents types avec des longueurs de lignes variables. De plus, il y a des centaines de ces fichiers et ils sont souvent de taille relativement importante (> 200Mb).
La structure de chaque fichier peut être démontrée comme suit :
Book , ISBN , BookName , Authors , Edition
Book , 978-1934356081, Programming Ruby 1.9 , Dave Thomas, 1
Book , 978-0596158101, Programming Python , Mark Lutz , 4
...
BookPrice, ISBN , Store , Price
BookPrice, 978-1934356081, amazon.com , 30.0
BookPrice, 978-1934356081, barnesandnoble.com , 30.67
BookPrice, 978-0596158101, amazon.com , 39.55
BookPrice, 978-0596158101, barnesandnoble.com , 44.66
...
Book , ISBN , BookName , Authors , Edition
Book , 978-1449311520, Hadoop - The Definitive Guide, Tom White , 3
...
Les fichiers sont générés automatiquement, et je n'ai aucun contrôle sur la structure donnée. En gros, il y a une ligne d'en-tête suivie de lignes de données contenant des valeurs correspondant aux en-têtes. Le type de ligne peut être identifié par le premier mot séparé par une virgule. Ainsi, dans l'exemple, la ligne Book
contient des métadonnées sur les livres (nom, isbn, auteur, édition), et la rangée BookPrice
contient les différents prix des livres pour les différents points de vente/vendeurs.
J'essaie de comprendre comment utiliser Map/Reduce pour effectuer certains calculs agrégés sur les données. La structure actuelle des données rend plus difficile la compréhension de ce qu'il faut faire. key -> value
paires à extraire dans chaque phase.
Par exemple, je voudrais calculer les MOYENNE , MAX y MIN les prix de chaque livre (peuvent être joints/groupés par ISBN). Je me rends compte que je peux faire un prétraitement pour extraire ces données dans des fichiers CSV ordonnés et d'un seul type et travailler à partir de là (en utilisant grep, python, awk, etc.), mais cela va à l'encontre de l'intérêt d'utiliser M/R+Hadoop, et nécessitera beaucoup de travail supplémentaire.
J'ai pensé à utiliser plusieurs étapes de la carte, mais je suis assez novice dans ce domaine et je ne sais pas trop par où commencer.
Comment puis-je mettre en œuvre un tel travail M/R (en Java) pour le fichier/la requête type ? Merci.