val lines: RDD[String] = sc.textFile("/tmp/inputs/*")
val tokenizedLines = lines.map(Tokenizer.tokenize)
在上面的代碼片段中,tokenize函數可能會返回空字符串。在那種情況下,我如何跳過將它添加到地圖?或添加到地圖後刪除空的條目?從scala中的地圖中刪除空字符串
val lines: RDD[String] = sc.textFile("/tmp/inputs/*")
val tokenizedLines = lines.map(Tokenizer.tokenize)
在上面的代碼片段中,tokenize函數可能會返回空字符串。在那種情況下,我如何跳過將它添加到地圖?或添加到地圖後刪除空的條目?從scala中的地圖中刪除空字符串
tokenizedLines.filter(_.nonEmpty)
VAL tokenizedLines =(lines.map(Tokenizer.tokenize))。過濾器(_.nonEmpty)
目前公認的答案,用filter
和nonEmpty
,招致的性能損失,因爲nonEmpty
不上String
的方法,但是,相反,它是通過隱式轉換增加。在使用價值對象的情況下,我預計這種差異幾乎察覺不到,但在Scala版本中,如果情況並非如此,那麼這種差異會非常大。
相反,人們可以利用這一點,這是有保證的要快:
tokenizedLines.filterNot(_.isEmpty)
沒有此過濾器的結果或刪除它們?我熱衷於消除它們。 – Siva 2014-11-05 09:43:52
過濾器返回一個沒有空字符串的新集合。 – akagroundhog 2014-11-05 09:45:51
當我在過濾後打印標記行時,它仍然在數組緩衝區中有空字符串。我是否還有其他東西丟失? – Siva 2014-11-05 09:53:28