2014-11-05 14 views
8
val lines: RDD[String] = sc.textFile("/tmp/inputs/*") 
val tokenizedLines = lines.map(Tokenizer.tokenize) 

nello snippet di codice precedente, la funzione token può restituire stringhe vuote. Come faccio a saltare aggiungendolo alla mappa in quel caso? o rimuovere le voci vuote post aggiungendo alla mappa?Rimozione di stringhe vuote dalle mappe in scala

risposta

23

tokenizedLines.filter(_.nonEmpty)

+0

fa questo filtro il risultato o rimuoverli? Sono entusiasta di rimuoverli. – Siva

+0

Il filtro restituisce una nuova raccolta senza stringhe vuote. – akagroundhog

+0

quando stampo il filtro post delle righe tokenizzate, ha ancora stringhe vuote nel buffer di array. Mi manca qualcosa in più? – Siva

1

È possibile che venga potrebbe usare flatMap con l'opzione?

cosa

sime del genere lines.flatMap { caso "" => Nessuno caso s => Alcuni (s) }

+0

Non posso usare flatmap per alcuni motivi .. – Siva

+0

ow lines.flatMap {case "" => Nil case s => Seq (s)} so? – crak

0

val tokenizedLines = (lines.map (Tokenizer.tokenize)). Filtro (_.nonEmpty)

10

La risposta attualmente accettato, utilizzando filter e nonEmpty, incorre in alcuna penalità prestazioni perché nonEmpty non è un metodo su String, ma, invece, viene aggiunto attraverso la conversione implicita. Con gli oggetti value usati, mi aspetto che la differenza sia quasi impercettibile, ma nelle versioni di Scala, dove non è così, è un successo notevole.

Invece, si potrebbe utilizzare questo, che è assicurata per essere più veloce:

tokenizedLines.filterNot(_.isEmpty) 
Problemi correlati