Quelqu'un peut-il m'expliquer la différence entre map et flatMap et quel est un bon cas d'utilisation pour chacun?
Que signifie «aplatir les résultats»? À quoi ça sert?
apache-spark
Eran Witkon
la source
la source
RDD.map
etRDD.flatMap
dans Apache Spark . En général, les opérations RDD de Spark sont modélisées d'après leurs opérations de collecte Scala correspondantes. Les réponses dans stackoverflow.com/q/1059776/590203 , qui discutent de la distinction entremap
etflatMap
dans Scala, peuvent vous être utiles.Réponses:
Voici un exemple de différence, en
spark-shell
session:Tout d'abord, quelques données - deux lignes de texte:
Maintenant,
map
transforme un RDD de longueur N en un autre RDD de longueur N.Par exemple, il mappe de deux lignes en deux longueurs de ligne:
Mais
flatMap
(en gros) transforme un RDD de longueur N en une collection de N collections, puis les aplatit en un seul RDD de résultats.Nous avons plusieurs mots par ligne et plusieurs lignes, mais nous nous retrouvons avec un seul tableau de sortie de mots
Juste pour illustrer cela, flatMapping d'une collection de lignes à une collection de mots ressemble à:
Les RDD d'entrée et de sortie seront donc généralement de tailles différentes pour
flatMap
.Si nous avions essayé d'utiliser
map
avec notresplit
fonction, nous nous serions retrouvés avec des structures imbriquées (un RDD de tableaux de mots, avec typeRDD[Array[String]]
) car nous devons avoir exactement un résultat par entrée:Enfin, un cas spécial utile est le mappage avec une fonction qui peut ne pas retourner de réponse, et renvoie donc un
Option
. Nous pouvons utiliserflatMap
pour filtrer les éléments qui retournentNone
et extraire les valeurs de ceux qui retournent aSome
:(notant ici qu'une option se comporte plutôt comme une liste qui a soit un élément, soit zéro élément)
la source
["a b c", "", "d"] => [["a","b","c"],[],["d"]]
?split
sur une liste de chaînes produira une liste de tableaux)Généralement, nous utilisons l'exemple de comptage de mots dans hadoop. Je prendrai le même cas d'utilisation
map
et utiliserai etflatMap
nous verrons la différence dans la façon dont il traite les données.Voici un exemple de fichier de données.
Le fichier ci-dessus sera analysé à l'aide de
map
etflatMap
.En utilisant
map
L'entrée a 4 lignes et la taille de sortie est également 4, c'est-à-dire N éléments ==> N éléments.
En utilisant
flatMap
La sortie est différente de la carte.
Attribuons 1 comme valeur à chaque clé pour obtenir le nombre de mots.
fm
: RDD créé en utilisantflatMap
wc
: RDD créé en utilisantmap
Alors que
flatMap
sur RDDwc
donnera la sortie indésirable ci-dessous:Vous ne pouvez pas obtenir le nombre de mots si
map
est utilisé à la place deflatMap
.Selon la définition, la différence entre
map
etflatMap
est:la source
.map(lambda line:line.split(" "))
n'est pas un tableau de chaînes. Vous devez passerdata.collect()
àwc.collect
et vous verrez un tableau de tableaux.wc.collect()
?Si vous demandez la différence entre RDD.map et RDD.flatMap dans Spark, map transforme un RDD de taille N en un autre de taille N. par exemple.
par exemple, si myRDD est composé de doubles.
FlatMap peut transformer le RDD en un anthère de taille différente: par exemple:
qui renverra un RDD de taille 2 * N ou
la source
Cela se résume à votre question initiale: que voulez-vous dire par aplatissement ?
la source
Utilisez
test.md
comme exemple:Si vous utilisez la
map
méthode, vous obtiendrez les lignes detest.md
, pour laflatMap
méthode, vous obtiendrez le nombre de mots.La
map
méthode est similaire àflatMap
, ils renvoient tous un nouveau RDD.map
souvent utiliser pour retourner un nouveau RDD,flatMap
souvent utiliser des mots séparés.la source
map
renvoie RDD d'un nombre égal d'éléments alorsflatMap
qu'il ne le peut pas.Un exemple d'utilisation pour
flatMap
filtrer les données manquantes ou incorrectes.Un exemple de cas d'
map
utilisation pour une utilisation dans une grande variété de cas où le nombre d'éléments d'entrée et de sortie est le même.number.csv
map.py ajoute tous les nombres dans add.csv.
flatMap.py utilise
flatMap
pour filtrer les données manquantes avant l'ajout. Moins de numéros sont ajoutés par rapport à la version précédente.la source
map et flatMap sont similaires, dans le sens où ils prennent une ligne du RDD d'entrée et y appliquent une fonction. La façon dont ils diffèrent est que la fonction dans map ne renvoie qu'un seul élément, tandis que la fonction dans flatMap peut renvoyer une liste d'éléments (0 ou plus) en tant qu'itérateur.
De plus, la sortie du flatMap est aplatie. Bien que la fonction dans flatMap renvoie une liste d'éléments, le flatMap renvoie un RDD qui contient tous les éléments de la liste de manière plate (pas une liste).
la source
tous les exemples sont bons .... Voici une belle illustration visuelle ... source courtoisie: Formation DataFlair de spark
Carte: une carte est une opération de transformation dans Apache Spark. Il s'applique à chaque élément de RDD et renvoie le résultat en tant que nouveau RDD. Dans la carte, le développeur d'opérations peut définir sa propre logique métier personnalisée. La même logique sera appliquée à tous les éléments de RDD.
La
map
fonction Spark RDD prend un élément en entrée le traite selon le code personnalisé (spécifié par le développeur) et retourne un élément à la fois. La carte transforme un RDD de longueur N en un autre RDD de longueur N. Les RDD d'entrée et de sortie auront généralement le même nombre d'enregistrements.Exemple d'
map
utilisation de scala:FlatMap:
A
flatMap
est une opération de transformation. Il s'applique à chaque élément de RDD et renvoie le résultat comme nouveauRDD
. Il est similaire à Map, mais FlatMap permet de retourner 0, 1 ou plusieurs éléments de la fonction map. Dans l'opération FlatMap, un développeur peut définir sa propre logique métier personnalisée. La même logique sera appliquée à tous les éléments du RDD.Une fonction FlatMap prend un élément en entrée, le traite selon le code personnalisé (spécifié par le développeur) et renvoie 0 ou plusieurs éléments à la fois.
flatMap
() transforme un RDD de longueur N en un autre RDD de longueur M.Exemple d'
flatMap
utilisation de scala:la source
La différence peut être vue à partir de l'exemple de code pyspark ci-dessous:
la source
Flatmap et Map transforment tous les deux la collection.
Différence:
map (func)
Retourne un nouvel ensemble de données distribué formé en passant chaque élément de la source à travers une fonction func.
flatMap (func)
Similaire à map, mais chaque élément d'entrée peut être mappé à 0 ou plusieurs éléments de sortie (donc func doit retourner un Seq plutôt qu'un seul élément).
La fonction de transformation:
map : un élément en entrée -> un élément en sortie.
flatMap : un élément entrant -> 0 ou plusieurs éléments sortants (une collection).
la source
RDD.map
renvoie tous les éléments dans un seul tableauRDD.flatMap
renvoie des éléments dans des tableaux de tableausupposons que nous ayons du texte dans le fichier text.txt comme
Utilisation de la carte
production:
Utilisation de flatMap
production:
la source
Pour tous ceux qui ont voulu PySpark liés:
Exemple de transformation: flatMap
['salut que fais tu']
Traceback (dernier appel le plus récent): Fichier "", ligne 1, dans AttributeError: l'objet 'list' n'a pas d'attribut 'split'
[['bonjour', 'quoi', 'êtes', 'vous', 'faire'], ['ceci', 'est', 'rak']]
['bonjour', 'quoi', 'êtes', 'vous', 'faire', 'ceci', 'est', 'rak']
J'espère que ça aide :)
la source
map
: Il retourne un nouveauRDD
en appliquant une fonction à chaque élément duRDD
. La fonction dans .map ne peut renvoyer qu'un seul élément.flatMap
: Similaire à la carte, il renvoie un nouveauRDD
en appliquant une fonction à chaque élément du RDD, mais la sortie est aplatie.De plus, la fonction in
flatMap
peut renvoyer une liste d'éléments (0 ou plus)Par exemple:
Source: https://www.linkedin.com/pulse/difference-between-map-flatmap-transformations-spark-pyspark-pandey/
la source
carte:
est une méthode d'ordre supérieur qui prend une fonction en entrée et l'applique à chaque élément du RDD source.
http://commandstech.com/difference-between-map-and-flatmap-in-spark-what-is-map-and-flatmap-with-examples/
flatMap:
une méthode d'ordre supérieur et une opération de transformation qui prend une fonction d'entrée.
la source
Différence de sortie de map et flatMap:
1.
flatMap
Production:
2
map
.:Production:
la source
alors
la source