2015-08-26 13 views
5

Mam aplikację CLI do transformacji JSON. Większość jego kodu to pingowanie map ping, flatMap i przechodzenie z for listami JValues. Teraz chcę przenieść tę aplikację do Sparka, ale wydaje mi się, że muszę przepisać wszystkie funkcje 1: 1, ale napiszę RDD[JValue] zamiast List[JValue].Traktuj Spark RDD jak zwykły Seq

Czy istnieje sposób (jak klasa typu) dla funkcji akceptowania obu list i RDD.

+2

Sygnatura metody na liście i na RDD to nie to samo, więc będzie to bolało. Możesz być w stanie zastosować metodę typeclass i zdefiniować własne opakowanie dla swojej mapy, zapewniając instancję dla obu. Jeśli mógłbyś zdefiniować monotazy ze skalą i przetasować instancje dla RDD, możesz to wykorzystać. – Daenyth

+0

Myślę, że nie powinno być problemów z funktorem. Ale na pierwszy rzut oka RDD nie posiada praw Monada. – chuwy

+1

Jeśli RDD nie przestrzega praw monady, nie będziesz w stanie użyć FlatMap z typografią scalazy. Powiedziałeś, że możesz zaimplementować wersję, która nie jest zgodna z prawem, a może * może * działać zgodnie z Twoimi potrzebami. Podobne do zapewnienia ValidationFlatMap – Daenyth

Odpowiedz

2

Jeśli chcesz udostępnić swój kod do przetwarzania lokalnych & streszczenie kod można przenieść swój lambdy/anaonymous funkcje, które przechodzą do map/flatMap do wymienionych funkcji i ich ponowne wykorzystanie.

Jeśli chcesz ponownie użyć logiki, jak zamówić mapach/flatMaps/etc, można także utworzyć niejawne konwersje pomiędzy obiema RDD i Seq do niestandardowego cecha, która ma tylko wspólne funkcje, ale konwersje niejawne mogą stają się bardzo zagmatwane i nie sądzę, że to dobry pomysł (ale możesz może to zrobić, jeśli nie zgadzasz się ze mną :)).

+0

Uważam, że konwersje rzeczywiście wymagają działań, więc RDD zostanie obliczone. – chuwy

+0

w rzeczy samej, musielibyście mieć również działanie na wspólną cechę, aby kiedykolwiek wykonało jakąś pracę. Naprawdę uważam, że właściwą drogą do tego jest faktoring naszej wspólnej logiki wewnątrz mapy/flatMap/etc jeśli to działa dla ciebie. – Holden

+0

Dziękuję. Prawdopodobnie będzie to mój wybór, jeśli nie znajdę czegoś bardziej odpowiedniego. Problem polega na tym, że funkcje lambda są teraz łączone w większe, więc faktoring może je nieco ugryźć. Też myślę o używaniu 'Albo". – chuwy

Powiązane problemy