Map Reduce Proste zliczanie słów i zapytania SQL 15 maja 2014 Opis pliku z zadaniami Wszystkie zadania na zajęciach będą przekazywane w postaci plików PDF sformatowanych jak ten. Będą się na nie składały różne roadzje zadań, ale za każdym razem będą odpowiednio oznaczone: Zadania do wykonania na zajęciach oznaczone są symbolem nie są one punktowane, ale należy je wykonać w czasie zajęć. Punktowane zadania do wykonania na zajęciach oznaczone są symbolem należy je wykonać na zajęciach i zaprezentować prowadzącemu. Zadania do wykonania w domu oznaczone są symbolem - są one punktowane, należy je dostarczyć w sposób podany przez prowadzącego i w wyznaczonym terminie (zwykle do dwóch dni przed kolejnymi zajęciami). Po zakończeniu zajęć proszę o udzielenie odpowiedzi na kilka pytań zebranych w ankietę dostępną pod adresem http://goo.gl/axx2gv 1
1 Grep count Rozszerzeniem podstawowego programu WordCount może być wyszukiwanie wszyskich fraz pasujących do podanego wzorca. Twoim zadaniem jest napisać program wykorzystujący framework Hadoop, który dla dowolnego zbioru dokumentów tekstowych (korpusu) znajdzie wszystkie frazy pasujące do wzorca, policzy ile razy dana fraza występuje w korpusie i posortuje frazy według liczby wystąpień. Wyrażenie regularne, używane w programie, powinno być podawane jako parametr wejściowy. Możesz skorzystać z przygotowanego szablonu projektu (klasa GrepCount). 2
2 N-gram 2p. Zadanie można było wykonać na poprzednich zajęciach lub w domu. Jeżeli go nie wykonałe(a)ś musisz zrobic to teraz. N-gramem nazywamy ciąg n kolejnych znaków pobranych z pewnej frazy. Na przyklad dla zdania Ala ma kota otrzymamy następujące 3-gramy wraz z ich licznościami: " ko" : 1 " ma" : 1 "Ala" : 1 "a k" : 1 "a m" : 1 "kot" : 1 "la " : 1 "ma " : 1 "ota" : 1 Twoim zadaniem jest napisać program wykorzystujący framework Hadoop, który dla dowolnego zbioru dokumentów tekstowych (korpusu) wygeneruje N-gramy dla każdej z linijek i policzy ich liczności w całym korpusie. Niech liczba n będzie dowolna, wybierana podczas uruchomienia programu. Możesz skorzystać z przygotowanego szablonu projektu (klasa NGramCount). 3
3 Neighbour count 2p. Innym sposobem analizy tekstu jest policzenie wyrazów współwystępujących, np w jednym zdaniu czy akapicie. Uproszczeniem tego zadania jest znalezienie w korpusie dokumentów takich par słów, które występują często razem. Twoim zadaniem jest napisać program wykorzystujący framework Hadoop, który dla dowolnego zbioru dokumentów tekstowych (korpusu) policzy liczbę unikalnych wyrazów z jakimi sąsiaduje każdy wyraz z korpusu. Dla zdania: Ala ma Ala da wynik programu powinien byc następujący: "Ala" : 2 "ma" : 1 "da" : 1 Możesz skorzystać z przygotowanego szablonu projektu (klasa Neighbour- Count). 4
4 SQL 3p. + 1p. bonus W plikach sales.in oraz dates.in znajdują się dane dotyczące sprzedaży produktów. Plik sales.in odpowiada relacji sales (sale id, product id, day id, customer name, value, shop city, is promo), a plik dates.in odpowiada relacji dates (day id, month, year). Twoim zadaniem jest napisać program wykorzystujący framework Hadoop, który będzie odpowiadał następującemu zapytaniu SQL: SELECT month, year, SUM(value) FROM sales NATURAL JOIN date WHERE is_promo GROUP BY month, year Początek przykładowej odpowiedzi programu (bez zadania dodatkowego): 01 2000 456412 01 2001 469190 01 2002 472088 02 2000 436074 02 2001 423590 02 2002 409556 03 2000 464078... Uwaga! Może istnieć wiele faktów sprzedaży dotyczących jednej daty. Taka sytuacja modelowana jest przez złączenie typu 1-wielu. Jeśli będziesz mieć problem z takim złączeniem możesz wykorzystać plik sales.easy.in, który zawiera tylko po jednym fakcie dla jednej daty (złączenie typu 1-1). Skorzystanie z tego ułatwienia będzie kosztować Cię 1 punkt. Zadanie dodatkowe Dodaj do swojego programu obsługę klauzuli ORDER BY SUM(value) DESC. Praca domowa! Zadanie niedokończone podczas zajęć należy dokończyć w domu i najpóźniej do wtorku do północy należy przesłać implementację klasy SQLTask prowadzącemu. 5