Ma compréhension consiste à calculer des centiles, les données doivent être triées. Cela serait-il possible avec une énorme quantité de données réparties sur plusieurs serveurs, sans le déplacer? P>
3 Réponses :
La réponse à votre question est Cet article érudit décrit certaines des problèmes avec la carte-réduction sur les données structurées et offre une approche alternative avec "Clydesdale". (Je n'ai jamais entendu parler ou utilisé cela, donc je ne peux ni l'endorcer ni parler de ses forces / faiblesses.) P>
Je recherche plus de liens qui offrent des explications et des alternatives. P>
Bien que MapReduce en tant que paradigme ne ressemble pas au problème, la mise en œuvre de MR - est. de
La mise en œuvre de la carte de Hadoop est basée sur Sort distribué Strong> - et c'est ce dont vous avez besoin. Hadoop fait trier en déplaçant des données entre serveurs une seule fois - pas si mal. de
Je suggérerais de regarder sur Hadoop TeraSort MiseAiTon illustrant le bien (et probablement le meilleur) de manière à trier des données massives avec Hadoop. http: //hadoop.apache .org / docs / actuel / API / org / Apache / Hadoop / Exemples / TeraSort / Package-Sommaire.html P>
Je créerais d'abord un histogramme, sur une machine ou plusieurs machines. Une fois que vous avez compté pour chaque valeur possible des godets de valeurs possibles, vous pouvez les combiner si nécessaire. Le gain d'utilisation d'un histogramme est qu'il a une insertion / un temps de tri au lieu de O (journal n) et utilise un espace O (m) où M est le nombre de valeurs ou de godets possibles au lieu de O (n) est le nombre d'échantillons. p>
Un histogramme est naturellement trié pour que vous puissiez obtenir un compte total et trouver les centimètres en comptant à partir de l'une ou l'autre extrémité. P>