2016-04-09 11 views
-2

Ich habe eine TXT-Datei, die mehrere Zeilen enthält. Siehe Beispiele von 2 Zeilen unter:Herausfiltern aller Datensätze, die nicht korrekt mit Spark und Scala analysieren

2014-03-15:10:10:20,Sorrento F41L,8cc3b47e-bd01-4482-b500-28f2342679af,7,24,39,enabled,disabled,connected,55,67,12,33.6894754264,-117.543308253 
2014-03-15:10:10:20|MeeToo 1.0|ef8c7564-0a1a-4650-a655-c8bbd5f8f943|0|31|63|70|39|27|enabled|enabled|enabled|37.88904|-121.485029632 

Wie Sie sehen können, die erste Zeile begrenzt ist durch Komma, während das zweite Leitungsrohr begrenzt ist. Die Datei enthält viele Zeilen, einige davon sind durch Kommas getrennt und einige andere sind durch Zeilenbegrenzung getrennt.

Was ich tun muß, ist alle Datensätze herausgefiltert werden, die analysieren nicht korrekt (dh Jeder korrekt analysiert Datensatz/Zeile sollte genau 14 Werte/Felder)

Zuerst habe ich die Datei mit sc.textFile lesen ("/path/filename.txt"), aber ich weiß nicht weiter.

+0

Sind beide Rohr und Komma getrennt Wert Linien? Können Kommas in durch Rohrleitungen getrennten Linien und Rohre in durch Komma getrennten Linien angezeigt werden? Im Grunde müssen Sie definieren, was Sie mit "richtig parsen" meinen. –

+0

Nein, Kommas werden nicht in durch Rohrleitungen getrennten Zeilen angezeigt und auch Pipes werden nicht in durch Kommas getrennten Zeilen angezeigt. –

+0

Sie können also einfach auf '[|,]' teilen und dann die Felder wie in @ stevewaldram's Antwort zählen. –

Antwort

1

Vielleicht so etwas wie

sc.textFile("/path/filename.txt").map(_.split("[|,]")).filter(_.length == 14) 
+0

Danke Steve, das hat gut funktioniert. –

Verwandte Themen