2010-07-28 25 views
3

donné mes données d'entrée dans userid, le format Itemid:générant des combinaisons de bigrammes à partir des données regroupées en porc

raw: {userid: bytearray,itemid: bytearray} 

dump raw; 
(A,1) 
(A,2) 
(A,4) 
(A,5) 
(B,2) 
(B,3) 
(B,5) 
(C,1) 
(C,5) 

grpd = GROUP raw BY userid; 

dump grpd; 

(A,{(A,1),(A,2),(A,4),(A,5)}) 
(B,{(B,2),(B,3),(B,5)}) 
(C,{(C,1),(C,5)}) 

Je voudrais générer toutes les combinaisons (pour ne pas important) des éléments de chaque groupe. J'ai finalement l'intention d'effectuer une similitude jaccard sur les éléments de mon groupe.

idéalement mes bigrams les seraient générés et puis j'Aplatir la sortie pour ressembler à:

(A, (1,2)) 
(A, (1,3)) 
(A, (1,4)) 
(A, (2,3)) 
(A, (2,4)) 
(A, (3,4)) 
(B, (1,2)) 
(B, (2,3)) 
(B, (3,5)) 
(C, (1,5)) 

Les lettres ABC, qui représentent le userid, ne sont pas vraiment nécessaires à la sortie, je suis juste en les montrant à des fins d'illustration. De là, je compterais le nombre d'occurrences de chaque bigram afin de calculer jaccard. J'aimerais savoir si quelqu'un d'autre utilise cochon pour des similitudes similaires (désolé!) Et ont déjà rencontré cela.

J'ai regardé le NGramGenerator fourni avec les tutoriels pig, mais il ne correspond pas vraiment à ce que j'essaye d'accomplir. Je me demande si un streaming UDF en python est le chemin à suivre.

+0

Vous recherchez exactement la même chose - avez-vous trouvé une réponse? – Jilles

+0

esprit partageant votre solution ici? –

Répondre

1

Vous allez certainement devoir écrire un UDF (en Python ou en Java, ça irait bien). Vous voudriez que cela fonctionne sur un sac, puis sortez un sac (si vous aplatissez un sac de touples, vous obtiendrez des lignes de sortie pour vous donner la sortie que vous voulez).

l'UDF lui-même ne serait pas très difficile ... quelque chose comme

letter, number = zip(*input_touples) 
number = list(set(number) 

for i in range(0,len(number)): 
    for j in range(i,len(number)): 
     res.append((number[i],number[j])) 

et puis juste jeter les choses et les retourner correctement.

Si vous avez besoin d'aide pour créer un simple fichier python, ce n'est pas si mal. Vérifiez ici: http://pig.apache.org/docs/r0.8.0/udf.html

Et bien sûr, ne hésitez pas à demander plus d'aide ici