Ich versuche, Dateidaten in gute und schlechte Daten pro Datum zu filtern, wird also 2 Ergebnisdateien erhalten. Aus der Testdatei müssen die ersten 4 Zeilen in gute Daten und die letzten 2 Zeilen in schlechte Daten gehen.Spark-Filterung mit Regex
I 2 Ausgaben
- Ich bin keine gute Daten bekommen habe, Ergebnisdatei ist leer
und schlechte Daten Ergebnis sieht wie folgt aus - die Namen Zeichen nur
Aufnehmen (, C, h) (, J, U) (, T, h) (, J, O) (, N, e) (, B, i)
Testdatei
Christopher|Jan 11, 2017|5
Justin|11 Jan, 2017|5
Thomas|6/17/2017|5
John|11-08-2017|5
Neli|2016|5
Bilu||5
Laden und RDD
scala> val file = sc.textFile("test/data.txt")
scala> val fileRDD = file.map(x => x.split("|"))
RegEx
scala> val singleReg = """(\w(3))\s(\d+)(,)\s(\d(4))|(\d+)\s(\w(3))(,)\s(\d(4))|(\d+)(\/)(\d+)(\/)(\d(4))|(\d+)(-)(\d+)(-)(\d(4))""".r
Ist drei "(doppelte Anführungszeichen) in Anfan ng und end und .r wichtig hier?
Filter Ausgabe Bereich
scala> val validSingleRecords = fileRDD.filter(x => (singleReg.pattern.matcher(x(1)).matches))
scala> val badSingleRecords = fileRDD.filter(x => !(singleReg.pattern.matcher(x(1)).matches))
Schalten Array in String
scala> val validSingle = validSingleRecords.map(x => (x(0),x(1),x(2)))
scala> val badSingle = badSingleRecords.map(x => (x(0),x(1),x(2)))
Datei schreiben
scala> validSingle.repartition(1).saveAsTextFile("data/singValid")
scala> badSingle.repartition(1).saveAsTextFile("data/singBad")
Update 1 Mein Regex oben war falsch, ich habe es aktualisiert. in scala Backslash ein Escape-Zeichen ist, müssen so duplizieren
val singleReg = """\\w{3}\\s\\d+,\\s\\d{4}|\\d+\\s\\w{3},\\s\\d{4}|\\d+\/\\d+\/\\d{4}|\\d+-\\d+-\\d{4}""".r
die Regex auf regex101 Geprüft und die Daten in den ersten vier Zeilen bestehen.
Ich habe den Test erneut ausgeführt und ich bekomme immer noch das gleiche Ergebnis.
Können Sie bitte die erwartete Ausgabe für gute und schlechte Daten erwähnen? – himanshuIIITian
Die ersten 4 Zeilen müssen in gute Daten und die letzten 2 Zeilen in schlechte Daten pro Regex gehen. –
Warum denkst du, dass dein REGEX mit den ersten 4 Zeilen übereinstimmt? Was glaubst du, '' w (3) '? Die Anzahl der Vorkommen ist sicher nicht 3 ohne geschweifte Klammern. Ihr passt buchstäblich zu "3" Sie können das REGEX online testen, z. hier https://regex101.com/ – AKSW