Quelles sont les différences entre sc.paralléliser et sc.fichier texte?
Je suis nouvelle Étincelle. quelqu'un peut-veuillez effacer mes doutes:
Permet de supposer ci-dessous mon code:
a = sc.textFile(filename)
b = a.filter(lambda x: len(x)>0 and x.split("\t").count("111"))
c = b.collect()
J'espère ci-dessous est ce qui se passe en interne: (Merci de corriger si ma compréhension est erronée)
(1) la variable a sera enregistré comme un RDD variable contenant l'attendu le contenu du fichier txt
(2) Le conducteur nœud décompose le travail en tâches chaque tâche contient des informations sur la répartition des données qu'il va opérer.
Or, ces Tâches sont confiées à des nœuds de travail.
(3) lorsque l'action de collecte (j'.e collect() dans notre cas) est invoquée, les résultats seront retournés à la maîtrise de différents nœuds, et enregistrée comme une variable locale c.
Maintenant, je veux comprendre ce que la différence de code ci-dessous donne:
a = sc.textFile(filename).collect()
b = sc.parallelize(a).filter(lambda x: len(x)>0 and x.split("\t").count("111"))
c = b.collect()
Quelqu'un pourrait-il préciser ?
OriginalL'auteur user2531569 | 2017-07-01
Vous devez vous connecter pour publier un commentaire.
(Mise en valeur de la mine) Pas vraiment. La ligne décrit ce qui va se passer après vous d'exécuter une action, c'est à dire la RDD variable ne pas contenir les attendus le contenu du fichier txt.
La RDD décrit les partitions que, lorsqu'une action est appelée à devenir qui vous permettra de lire leurs parties du fichier d'entrée.
Oui, mais seulement lorsqu'une action est appelé, ce qui est
c=b.collect()
dans votre cas.OUI! C'est le plus dangereux fonctionnement de la mémoire-sage puisque toute l'Étincelle exécuteurs de course quelque part dans le cluster de commencer à envoyer des données vers le pilote.
Citant la documentation de sc.texte:
Citant la documentation de sc.paralléliser:
La différence avec les jeux de données - fichiers (pour
textFile
), tandis qu'une collection locale (pourparallelize
). Ne soit les mêmes choses sous les couvertures, c'est à dire à la fois de construire une description de la manière d'accéder aux données qui vont être traitées à l'aide de transformations et d'une action.La principale différence est donc la source de données.
Qui mérite une autre question (et pense que l'on a demandé déjà de recherche stackoverflow). Juste pour vous donner une, vous pouvez avoir un calcul parallèle et distribué dans Spark en fonction du nombre d'enregistrements (fichiers dans votre cas) par de la partition. Les Partitions sont les tâches parallèles. Le plus le plus le calcul parallèle.
Laskowski - sc.fichier texte (), je comprends. Comment ne sc.paralléliser(<>)? La collection est créée dans le programme pilote lui-même. Comment est (sont) la RDD (partitions) créé à partir de cette collection distribués aux nœuds du travailleur? Faire les partitions de la première à obtenir distribués aux nœuds du travailleur et ensuite tâches planifiées sur les exécuteurs testamentaires sur ces nœuds? Ou, faire les tâches individuelles ont leurs corr. CA partition déjà présent au moment de la DAGScheduler->TaskScheduler créé dans le pilote de programme de l'intention de distribuer les tâches aux exécuteurs sur les nœuds de travail?
OriginalL'auteur Jacek Laskowski