Meine Eingabedaten im Format userid,itemid:
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)})
Ich möchte alle Kombinationen (die Reihenfolge spielt keine Rolle) von Elementen innerhalb jeder Gruppe erstellen. Ich beabsichtige schließlich, Jaccard-Ähnlichkeit auf die Elemente in meiner Gruppe anzuwenden.
Im Idealfall würde ich die Bigramme generieren und dann die Ausgabe so FLATTEN, dass sie wie folgt aussieht:
(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))
Die Buchstaben ABC, die für die Benutzerkennung stehen, sind für die Ausgabe nicht wirklich notwendig, ich zeige sie nur zu Illustrationszwecken. Von dort aus würde ich die Anzahl der Vorkommen der einzelnen Bigramme zählen, um jaccard zu berechnen. Ich würde gerne wissen, ob jemand anderes Pig für ähnliche Ähnlichkeitsberechnungen verwendet (sorry!) und bereits auf dieses Problem gestoßen ist.
Ich habe mir den NGramGenerator angeschaut, der mit den Schweinetutorials geliefert wird, aber er passt nicht wirklich zu dem, was ich zu erreichen versuche. Ich frage mich, ob vielleicht eine Python-Streaming-UDF der Weg zu gehen ist.