Classification des opérateurs d'étincelles
Dans une perspective générale, les opérateurs d'étincelles peuvent être à peu près divisés en les deux catégories suivantes:
1) Opérateur de transformation / conversion de transformation: Cette transformation ne déclenche pas la soumission du travail et complète le traitement de processus intermédiaire du travail.
Les opérations de transformation sont des calculs retardés, ce qui signifie que l'opération de conversion pour générer un autre RDD à partir d'une conversion RDD n'est pas exécutée immédiatement. Il faut attendre qu'une opération d'action soit disponible avant que l'opération ne soit déclenchée.
2) Opérateur d'action d'action: ce type d'opérateur déclenchera SparkContext pour soumettre un travail de travail.
L'opérateur d'action déclenchera le travail (travail) de soumission Spark et sortira les données du système Spark.
D'un petit point de vue, les opérateurs d'étincelles peuvent être à peu près divisés en trois catégories suivantes:
1) Opérateur de transformation du type de données de valeur. Cette transformation ne déclenche pas la soumission du travail. Les éléments de données traités sont des données de type valeur.
2) L'opérateur de transfromation du type de données de valeur clé. Cette transformation ne déclenche pas la soumission du travail. Les éléments de données pour le traitement sont des paires de données de valeur clé.
3) Opérateur d'action, ce type d'opérateur déclenchera SparkContext pour soumettre un travail de travail.
introduction
Il est généralement plus pratique d'écrire des programmes Spark avec Scala, après tout, le code source de Spark est écrit dans Scala. Cependant, il existe actuellement de nombreux développeurs Java, en particulier lorsque l'amarrage des données et les services en ligne. Pour le moment, vous devez maîtriser certaines méthodes d'utilisation de Spark en Java.
1. Carte
La carte ne peut pas être utilisée plus fréquemment lors du traitement et de la conversion de données
Avant d'utiliser la carte, vous devez d'abord définir un format de fonction transformé comme suit:
Fonction <String, étiqueté> transform = new function <String, étiqueté> () {// String est le type d'entrée d'une certaine ligne intitulée Point est le type de sortie converti @Override public étiqueté Call (String Row) lève exception {// réécriture la méthode d'appel String [] rowarr = row.split (","); int Rowsize = rowarr.length; Double [] Doublearr = new Double [Rowsize-1]; // sauf pour le premier lable, le reste de la pièce est analysé en un double et mis dans le tableau pour (int i = 1; i <rowSize; i ++) {string e chaque = rowarr [i]; Doublearr [i] = double.parsedouble (chacun); } // Convertir les données que vous venez d'obtenir en une fonction vectorielle vectorielle = Vectors.Dense (Doublearr); double label = double.parsedouble (rowarr [0]); // Construisez le format de données pour la formation de formation de classification Label Point Point Point = new LabeledPoint (étiquette, fonctionnalité); point de retour; }};Une attention particulière doit être accordée à:
1. L'entrée de la méthode d'appel doit être le type de ligne de données avant la conversion. La valeur de retour doit être le type de la ligne de données après le traitement.
2. Si une classe personnalisée est appelée dans la méthode de conversion, notez que le nom de classe doit être sérialisé, par exemple
classe publique TreeNensemble implémente sérialisable {}3. Si certains objets de classe sont appelés dans la fonction de conversion, tels que la méthode doit appeler un paramètre externe ou un modèle de traitement numérique (normalisation, normalisation, etc.), l'objet doit être déclaré final.
Ensuite, appelez la fonction de conversion le cas échéant
Javardd <étiqueté> rdd = oridata.tojavardd (). Map (transform);
Cette méthode nécessite la conversion de RDD ordinaire en Javardd. Le fonctionnement de la conversion à Javardd ne prend pas du temps, alors ne vous inquiétez pas
2. Filtre
Il est également très couramment utilisé dans des scénarios tels que d'éviter les valeurs nulles des données et les 0, et peut remplir les fonctions de l'endroit où dans SQL
Tout d'abord, nous devons définir une fonction. L'effet réel du renvoi d'une valeur booléenne étant donné une ligne de données est de conserver les données renvoyées à true.
Fonction <String, boolean> boolfilter = new function <String, boolean> () {// String est le type d'entrée d'une certaine ligne. Booléen est le type de sortie correspondant. Utilisé pour déterminer si les données sont conservées. @Override public booléen appel (string row) lève une exception {// réécriture la méthode d'appel booléen drapeau = row! = Null; drapeau de retour; }};Habituellement, ce qui doit être modifié dans l'utilisation réelle de cette fonction n'est que le type de ligne, c'est-à-dire le type d'entrée de la ligne de données. Contrairement à la fonction de conversion ci-dessus, la valeur de retour de cette méthode d'appel doit être corrigée comme booléen.
Puis la méthode d'appel
Javardd <étiqueté> rdd = oridata.tojavardd (). Filtre (bofilter);
3. Maptopair
Cette méthode est quelque peu similaire à la méthode MAP, et elle effectue également certaines conversions aux données. Cependant, la sortie de cette fonction est une ligne d'entrée de tuple. La méthode la plus couramment utilisée consiste à faire la validation croisée ou le calcul du taux d'erreur statistique Calcul AUC, etc.
De même, vous devez d'abord définir une fonction de conversion
Fonction <String, boolean> transformateur = new pairFunction <étiquetée, objet, objet> () {// étiqueté est les deux objets après le type d'entrée. Ne modifiez pas @Override public Tuple2 L'appel (ligne étiquetée) lève une exception {// réécriture la méthode d'appel ne change généralement que les paramètres d'entrée et la sortie. Ne modifiez pas la double prédicton = thisModel.predict (row.features ()); double label = row.label (); retourner new Tuple2 (prédicton, label); }});En ce qui concerne la classe d'appel et l'objet de classe, les exigences sont cohérentes avec la précédente. La classe doit être sérialisée et l'objet de classe doit être déclaré comme type final
Les appels correspondants sont les suivants:
Javapairrdd <objet, objet> PredictionSandLabels = oridata.maptopair (transformateur);
Ensuite, pour l'utilisation de prédictions et des élaboration, calculez la précision, le rappel, la précision et l'AUC. Il y aura dans le prochain blog. Veuillez rester à l'écoute.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.