入力データを 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)})
各グループ内の項目のすべての組み合わせ (順序は重要ではありません) を生成したいと思います。最終的には、グループ内のアイテムに対してジャカードの類似性を実行するつもりです。
理想的には、バイグラムが生成され、出力を次のようにフラット化します。
(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))
ユーザー ID を表す文字 ABC は、出力に実際には必要ありません。説明のために表示しているだけです。そこから、ジャカードを計算するために各バイグラムの出現回数を数えます。他の誰かが同様の類似度計算に pig を使用しているかどうかを知りたいです(申し訳ありません!)、すでにこれに遭遇しました。
豚のチュートリアルで提供されている NGramGenerator を見てきましたが、私が達成しようとしているものと実際には一致しません。おそらく Python ストリーミング UDF が適しているかどうか疑問に思っています。