1

私はこのようなテーブルを持っています:

sport    personId
1        1
1        2
1        3
2        1
2        4
2        6
3        1
3        3
3        6

スポーツの交差点の数を含む表を取得したいと思います。これは、擬似コードに相当します。

for sport1 in sports:
   for sport2 in sports:
       X[sport1,sport2] = count(intersect(sport1,sport2))

スポーツが2、3しかない場合は、そうすることを知っています。

select count(*) from (select * from table where sport = sport1) t1 join (select count(*) from table where sport = sport2) t2 on t1.personId = t2.personId;

しかし、私はすべてのスポーツのテーブルを生成したいと思います。

クロスジョインをサポートしていないHive0.9を使用していることに注意してください。

ありがとう!

4

1 に答える 1

1

スポーツのペアごとに、両方のスポーツをする人の数をリストするテーブルが必要ですか?

もしそうなら、Hadoop と Python のストリーミングでそれを行うことができます:

  • personId で並べ替え
  • sport、personId を Python に渡す
  • personId をキャッシュし、すべてのスポーツをリストに追加する
  • 別の personId を取得したら、次のようにします。

.

for i, sport1 in enumerate(sports):
    for sport2 in sports[i:]:
        print '\t'.join([sport1, sport2, '1'])

次にselect sport1, sport2, count(*) as c group by sport1, sport2、ストリーミング ジョブから出力された中間テーブルから。

于 2013-01-24T22:37:13.397 に答える