2009-12-02 4 views
2

Je suis très nouveau pour Hadoop et je suis actuellement tentent de joindre deux sources de données où la clé est un intervalle (par exemple [date début/date de fin]). Par exemple:Hadoop: intervalles et JOIN

input1:

20091001-20091002 A 
20091011-20091104 B 
20080111-20091103 C 
(...) 

input2:

20090902-20091003 D 
20081015-20091204 E 
20040011-20050101 F 
(...) 

Je voudrais trouver tous les enregistrements où le key1 chevauche la key2. Est-ce possible avec hadoop? Où puis-je trouver un exemple de mise en œuvre?

Merci.

+0

Pierre, ne sais pas si vous compris cela, mais toute idée est pour cela dans Pig? – Jilles

+0

Une solution a été donnée sur Biostar: http://biostar.stackexchange.com/questions/8821 – Pierre

Répondre

0

Je pense que tout ce qui est nécessaire est une classe clé où hashCode() et equals() font ce que vous voulez qu'ils fassent. Je soupçonne que vous pourriez rencontrer un problème où A chevauche B (ie A.equals (B) == vrai), B chevauche C, mais C ne chevauche pas A. Si vous implémentez une telle méthode equals(), vous aurez probablement avoir un comportement étrange. Fondamentalement, vous voulez faire quelque chose comme des requêtes lancinantes sur un Segment Tree (c'est-à-dire pour tous les intervalles de chevauchement E pour un intervalle (p1.start, p1.end), exécutez des requêtes lancinantes pour p1.start et p1.end).

Mais fondamentalement, non, je ne connais pas la bonne réponse à votre question. Mais peut-être une requête pour "Segment tree" hadoop vous aidera à démarrer.