La ruche se n premiers enregistrements du groupe par requête
J'ai tableau suivant dans la ruche
identifiant de l'utilisateur, l'utilisateur nom de l'utilisateur, l'adresse,les clics,les impressions,page-id,page-nom
J'ai besoin de savoir le top 5 des utilisateurs[nom d'utilisateur,nom d'utilisateur,l'utilisateur adresse] par les clics pour chaque page [page id de la page-nom]
Je comprends que nous devons premier groupe par [page id de la page-nom] et au sein de chaque groupe, je veux orderby [les clics,les impressions] desc puis émettent uniquement top 5 des utilisateurs[nom d'utilisateur, nom d'utilisateur, l'utilisateur adresse] pour chaque page, mais je trouve qu'il est difficile de construire la requête.
Comment pouvons-nous faire cela à l'aide de la Ruche UDF ?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec un rang (le titre) de l'UDF, il est décrit ici: http://ragrawal.wordpress.com/2011/11/18/extract-top-n-records-in-each-group-in-hadoophive/
Révisé réponse, la fixation du bug, comme mentionné par @Himanshu Gahlot
Remarque que le rang() udaf, nous est appliqué à la page-id de la colonne, dont la nouvelle valeur est utilisée pour rétablir ou augmenter le grade de contre (par exemple de réinitialisation du compteur pour chaque page-id de partition)
Comme de la Ruche 0.11, vous pouvez le faire à l'aide de la Ruche est construit dans le classement() et la fonction à l'aide de plus simple sémantique à l'aide de La ruche est intégré dans google Analytics et les fonctions de Fenêtrage. Malheureusement, je ne pouvais pas trouver autant d'exemples de ce que j'aurais aimé, mais ils sont vraiment, vraiment utile. À l'aide de ceux qui, à la fois de rang() et WhereWithRankCond sont intégrés, de sorte que vous pouvez faire:
Pas de UDF nécessaire, et un seul sous-requête! Aussi, tous les rang de la logique est localisée.
Vous pouvez en trouver d'autres (mais pas assez à mon goût) des exemples de ces fonctions dans ce Jira et sur ce type de blog.
Vous pouvez utiliser
each_top_k
function dehivemall
efficace pour une top-k calcul sur Apache Hive.La
each_top_k
UDTF est très rapide par rapport à d'autres méthodes de course haut-k requêtes (par exemple,distributed by/rank
) dans la Ruche, car il ne détient pas la totalité de classement pour les résultats intermédiaires.Disons vos données ressemble à ce qui suit :
Requête ci-dessous vous donnent :
Résultat :
Donc, pour la page1 vous obtenez 6 utilisateurs, utilisateurs avec le même nombre de clics sont classés de la même.
Mais, si vous êtes à la recherche d'exactement 5 utilisateurs, et de choisir de façon aléatoire dans le cas où plusieurs utilisateurs tombent dans le même rang. Vous pouvez utiliser la sous requête
Résultat :