2016-06-16 13 views
3

Mein Datensatz nach vielen programmatischen Bereinigung sieht so aus (zeigt Teildatensatz hier).Entfernen Sie aufeinanderfolgende Leerzeichen in RDD-Zeilen in Spark

ABCD  A [email protected]        79 
BGDA  F [email protected]        89 

Ich möchte diese in die für die weitere Funken folgende konvertieren Dataframe-Operationen

ABCD,A,[email protected],79 
BGDA,F,[email protected],89 


val reg = """/\s{2,}/""" 
val cleanedRDD2 = cleanedRDD1.filter(x=> !reg.pattern.matcher(x).matches()) 

Aber das gibt nichts zurück. Wie finde ich leere Zeichenfolgen und ersetze sie durch ein Trennzeichen? Danke! rt

+0

entfernen:

Um den Inhalt des RDD, nur .map verwenden zu ändern 'val reg = "" "\ s {2,}" ""' und Sie nicht 'verwenden können. matches() ', da es die vollständige Übereinstimmung der Zeichenfolge erfordert. Verwende 'find()'. –

+1

Vielleicht, was Sie wollen, ist viel einfacher, etwas wie https://ideone.com/T8OSIC. –

+0

Danke Wiktor. Das hat geholfen! – user1384205

Antwort

1

Es scheint, dass Sie nur alle nicht-vertikalen Leerzeichen in Ihren String-Daten ersetzen möchten. Ich schlage vor, replaceAll zu verwenden (um alle Vorkommen der Texte zu ersetzen, die dem Muster entsprechen) mit [\t\p{Zs}]+ Regex.

Hier ist nur ein sample code:

val s = "ABCD  A [email protected]        79\nBGDA  F [email protected]        89" 
val reg = """[\t\p{Zs}]+""" 
val cleanedRDD2 = s.replaceAll(reg, ",") 
print(cleanedRDD2) 
// => ABCD,A,[email protected],79 
//  BGDA,F,[email protected],89 

Und hier ist die regex demo. Die [\t\p{Zs}]+ entspricht mindestens einem Vorkommen einer Registerkarte (\t) oder einem beliebigen Unicode-Leerzeichen aus der Space Separator category.

die regex delimiters
newRDD = yourRDD.map(elt => elt.replaceAll("""[\t\p{Zs}]+""", ",")) 
+0

Ich habe einige weitere Details zu der Regex hinzugefügt, die ich benutzt habe. –

+0

Ihr Code verwendet keine RDDs (und Sie können 'replaceAll' nicht für eine gesamte RDD verwenden). 'map' mit' replaceAll' für jede Zeile würde funktionieren, obwohl –

+0

@TheArchetypalPaul: Ja, ich weiß, ich habe gerade die Regex gepostet, die das mit richtiger Zuordnung tun wird. Wenn Sie möchten, können Sie die gesamte Lösung buchen. –

Verwandte Themen