Czy ktoś może mi wyjaśnić różnicę między mapą a płaską mapą i jaki jest dobry przypadek użycia dla każdego z nich?
Co oznacza „spłaszczanie wyników”? Do czego to jest dobre?
apache-spark
Eran Witkon
źródło
źródło
RDD.map
iRDD.flatMap
w Apache Spark . Zasadniczo operacje RDD Spark są modelowane na podstawie odpowiednich operacji zbierania Scala. Odpowiedzi w stackoverflow.com/q/1059776/590203 , który omawia różnicę pomiędzymap
iflatMap
w Scala, mogą być pomocne dla Ciebie.Odpowiedzi:
Oto przykład różnicy jako
spark-shell
sesji:Po pierwsze, niektóre dane - dwa wiersze tekstu:
Teraz
map
przekształca RDD o długości N w inny RDD o długości N.Na przykład odwzorowuje dwie linie na dwie długości:
Ale
flatMap
(luźno mówiąc) przekształca RDD o długości N w zbiór N kolekcji, a następnie spłaszcza je w pojedyncze RDD wyników.Mamy wiele słów w wierszu i wiele wierszy, ale otrzymujemy jedną tablicę wyjściową słów
Aby to zilustrować, flatMapping z kolekcji linii do kolekcji słów wygląda następująco:
Wejściowe i wyjściowe RDD będą zatem zazwyczaj różnych rozmiarów
flatMap
.Gdybyśmy próbowali skorzystać
map
z naszejsplit
funkcji, mielibyśmy skończyło się struktur zagnieżdżonych (RDD tablic słów, z rodzajuRDD[Array[String]]
), ponieważ musimy mieć dokładnie jeden wynik na wejściu:Wreszcie jednym przydatnym przypadkiem specjalnym jest mapowanie za pomocą funkcji, która może nie zwrócić odpowiedzi, a zatem zwraca an
Option
. Możemy użyćflatMap
do odfiltrowania zwracanych elementówNone
i wyodrębnienia wartości z tych, które zwracająSome
:(zauważając tutaj, że Opcja zachowuje się raczej jak lista zawierająca jeden element lub zero elementów)
źródło
["a b c", "", "d"] => [["a","b","c"],[],["d"]]
?split
nad listą ciągów będzie produkować listę tablic)Ogólnie używamy przykładu liczby słów w hadoopie. Wezmę ten sam przypadek użycia i użyje
map
iflatMap
i widzimy różnicę w jaki sposób przetwarza dane.Poniżej znajduje się przykładowy plik danych.
Powyższy plik zostanie przeanalizowany przy użyciu
map
iflatMap
.Za pomocą
map
Dane wejściowe mają 4 linie, a wielkość wyjściowa również 4, tj. N elementów ==> N elementów.
Za pomocą
flatMap
Wyjście różni się od mapy.
Przypiszmy 1 jako wartość dla każdego klawisza, aby uzyskać liczbę słów.
fm
: RDD utworzone przy użyciuflatMap
wc
: RDD utworzono za pomocąmap
Podczas gdy
flatMap
na RDDwc
da poniższe niepożądane wyjście:Nie można uzyskać liczby słów, jeśli
map
jest używany zamiastflatMap
.Zgodnie z definicją różnica między
map
iflatMap
wynosi:źródło
.map(lambda line:line.split(" "))
nie jest tablica ciągów. Powinieneś zmienićdata.collect()
na,wc.collect
a zobaczysz tablicę tablic.wc.collect()
?Jeśli pytasz o różnicę między RDD.map i RDD.flatMap w Spark, map przekształca RDD o rozmiarze N na inny o rozmiarze N. na przykład.
na przykład, jeśli myRDD składa się z Doubles.
Chociaż flatMap może przekształcić RDD w inny o innym rozmiarze: np .:
który zwróci RDD o rozmiarze 2 * N lub
źródło
Sprowadza się do twojego początkowego pytania: co rozumiesz przez spłaszczanie ?
źródło
Użyj
test.md
jako przykładu:Jeśli użyjesz
map
metody, otrzymasz wierszetest.md
, dlaflatMap
metody, otrzymasz liczbę słów.map
Metoda jest podobna doflatMap
, wszystkie są nowe powrót RDD.map
metoda często używać zwraca nowy RDD,flatMap
metoda często używa podzielonych słów.źródło
map
zwraca RDD równej liczbie elementów, aflatMap
może nie.Przykład zastosowania przypadku
flatMap
odfiltrowania brakujących lub niepoprawnych danych.Przykładowy przypadek użycia do
map
użycia w wielu różnych przypadkach, w których liczba elementów wejściowych i wyjściowych jest taka sama.liczba. cv
map.py dodaje wszystkie liczby w add.csv.
flatMap.py używa
flatMap
do filtrowania brakujących danych przed dodaniem. Dodano mniej liczb w porównaniu do poprzedniej wersji.źródło
map i flatMap są podobne, w tym sensie, że pobierają linię z wejściowego RDD i stosują na niej funkcję. Różnią się one tym, że funkcja w mapie zwraca tylko jeden element, podczas gdy funkcja w flatMap może zwrócić listę elementów (0 lub więcej) jako iterator.
Również wyjście flatMap jest spłaszczone. Chociaż funkcja w flatMap zwraca listę elementów, flatMap zwraca RDD, która ma wszystkie elementy z listy w sposób płaski (nie listę).
źródło
wszystkie przykłady są dobre .... Oto ładna wizualna ilustracja ... źródło dzięki uprzejmości: szkolenie iskier DataFlair
Mapa: Mapa to operacja transformacji w Apache Spark. Odnosi się do każdego elementu RDD i zwraca wynik jako nowy RDD. Na mapie programista operacji może zdefiniować własną logikę biznesową. Ta sama logika zostanie zastosowana do wszystkich elementów RDD.
map
Funkcja Spark RDD przyjmuje jeden element jako proces wejściowy zgodnie z niestandardowym kodem (określonym przez programistę) i zwraca jeden element na raz. Mapa przekształca RDD o długości N w inny RDD o długości N. Wejściowe i wyjściowe RDD będą zazwyczaj miały tę samą liczbę rekordów.Przykład
map
użycia scala:FlatMap:
A
flatMap
jest operacją transformacji. Odnosi się do każdego elementu RDD i zwraca wynik jako nowyRDD
. Jest podobny do mapy, ale FlatMap pozwala zwrócić 0, 1 lub więcej elementów z funkcji mapy. W operacji FlatMap programista może zdefiniować własną logikę biznesową. Ta sama logika zostanie zastosowana do wszystkich elementów RDD.Funkcja FlatMap pobiera jeden element jako proces wejściowy zgodnie z niestandardowym kodem (określonym przez programistę) i zwraca 0 lub więcej elementów jednocześnie.
flatMap
() przekształca RDD o długości N w inny RDD o długości M.Przykład
flatMap
użycia scala:źródło
Różnicę widać poniżej przykładowego kodu pyspark:
źródło
Flatmap i Map przekształcają kolekcję.
Różnica:
map (func)
Zwraca nowy rozproszony zestaw danych utworzony przez przepuszczenie każdego elementu źródła przez funkcję func.
flatMap (func)
Podobne do mapy, ale każdy element wejściowy może być odwzorowany na 0 lub więcej elementów wyjściowych (więc func powinien zwrócić Seq, a nie pojedynczy element).
Funkcja transformacji:
mapa : jeden element na -> jeden element na zewnątrz.
flatMap : Jeden element na -> 0 lub więcej elementów na zewnątrz (kolekcja).
źródło
RDD.map
zwraca wszystkie elementy w jednej tablicyRDD.flatMap
zwraca elementy w tablicach tablicyzałóżmy, że mamy tekst w pliku text.txt jako
Korzystanie z mapy
wynik:
Korzystanie z flatMap
wynik:
źródło
Dla wszystkich, którzy chcieli powiązać PySpark:
Przykładowa transformacja: flatMap
['cześć co robisz']
Traceback (ostatnie ostatnie wywołanie): Plik „”, wiersz 1, w AttributeError: obiekt „list” nie ma atrybutu „split”
[[„hello”, „what”, „are”, „you”, „doing”], [„this”, „is”, „rak”]]
[„hello”, „what”, „are”, „you”, „doing”, „this”, „is”, „rak”]
Mam nadzieję, że to pomoże :)
źródło
map
: Zwraca nowyRDD
przez zastosowanie funkcji do każdego elementuRDD
. Funkcja w .map może zwrócić tylko jeden element.flatMap
: Podobnie do mapy, zwraca nowąRDD
poprzez zastosowanie funkcji do każdego elementu RDD, ale dane wyjściowe są spłaszczone.Również funkcja in
flatMap
może zwrócić listę elementów (0 lub więcej)Na przykład:
Źródło: https://www.linkedin.com/pulse/difference-between-map-flatmap-transformations-spark-pyspark-pandey/
źródło
mapa:
jest metodą wyższego rzędu, która przyjmuje funkcję jako dane wejściowe i stosuje ją do każdego elementu w źródłowym RDD.
http://commandstech.com/difference-between-map-and-flatmap-in-spark-what-is-map-and-flatmap-with-examples/
flatMap:
metoda wyższego rzędu i operacja transformacji, która przyjmuje funkcję wejściową.
źródło
Różnica w wynikach map i flatMap:
1.
flatMap
Wynik:
2
map
.:Wynik:
źródło
whiles
źródło