Le Pattern matching - spark scala CA
Je suis nouveau à l'Allumage et à la Scala en provenance de la R de fond.Après quelques transformations de CA, je reçois un CA de type
Description: RDD[(String, Int)]
Maintenant, je veux appliquer une expression Régulière sur la Chaîne de RDD et d'en extraire des sous-chaînes de la Corde, et d'ajouter une sous-chaîne dans une nouvelle coloumn.
Des Données D'Entrée :
BMW 1er Model,278
MINI Cooper Model,248
Sortie, je suis à la recherche d' :
Input | Brand | Series
BMW 1er Model,278, BMW , 1er
MINI Cooper Model ,248 MINI , Cooper
où la Marque et de la Série sont calculés à nouveau les sous-chaînes de la Chaîne de RDD
Ce que j'ai fait jusqu'à présent.
J'ai pu réaliser ce pour une Chaîne à l'aide de l'expression régulière, mais je cani appliquer bof toutes les lignes.
val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r //to look for BMW or MINI
Alors je peux utiliser
brandRegEx.findFirstIn("hello this mini is bmW testing")
Mais comment puis-je l'utiliser pour toutes les lignes de RDD et d'appliquer les différents expression régulière pour atteindre la sortie en tant que ci-dessus.
J'ai lu sur ce fragment de code, mais vous ne savez pas comment l'éteindre complètement.
val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r
def getBrand(Col4: String) : String = Col4 match {
case brandRegEx(str) =>
case _ => ""
return 'substring
}
Toute aide serait appréciée !
Grâce
- Pourriez préciser ce qu'est exactement la question ici? Les expressions régulières, correspondant à un modèle ou CA transformations?
- Désolé si la question n'est pas lisible. Fondamentalement, je veux faire la correspondance de Motif dans une chaîne de caractères à l'aide d'expressions régulières. C'est dans Spark-scala RDD.
Vous devez vous connecter pour publier un commentaire.
Pour appliquer vos regex pour chaque élément de la RDD, vous devez utiliser la RDD
map
fonction, qui transforme chaque ligne dans la RDD à l'aide d'une fonction (dans ce cas, une Fonction Partielle afin d'en extraire les deux parties du n-uplet qui fait de chaque ligne):Noter que je pense que vous avez des problèmes dans votre expression régulière, et vous avez aussi besoin d'une expression régulière pour trouver de la série. Ce code affiche:
Mais si vous corrigez votre regexes pour vos besoins, c'est comment vous pouvez les appliquer à chaque ligne.
findFirstIn(inString)
je ne suis pas en mesure d'obtenir juste la sous-chaîne que j'ai besoin. ex: si ma chaîne est Modèle BMW 5series.findFirstIn(inString)
me renvoie aussi le préfixe aussi "Modèle BMW". pourriez-vous me dire la fonction à utiliser. findFirstIn certainement ne pas donner la juste Substringsalut, je viens de regarder pour une autre question et a obtenu à cette question. Le problème ci-dessus peut être fait à l'aide de transformations normales.