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

trong đoạn mã trên, hàm tokenize có thể trả về chuỗi rỗng. Làm cách nào để bỏ qua việc thêm nó vào bản đồ trong trường hợp đó? hoặc xóa các bài viết trống khi thêm vào bản đồ?Xóa chuỗi trống khỏi bản đồ trong scala

Trả lời

23

tokenizedLines.filter(_.nonEmpty)

+0

không lọc này kết quả hoặc loại bỏ chúng? Tôi muốn loại bỏ chúng. – Siva

+0

Bộ lọc trả về bộ sưu tập mới không có chuỗi trống. – akagroundhog

+0

khi tôi in các dòng bài đăng đã được mã hóa, nó vẫn có các chuỗi rỗng trong bộ đệm mảng. Tôi đang thiếu một cái gì đó bổ sung? – Siva

1

Bạn có thể sử dụng flatMap with Option?

sime điều như thế lines.flatMap { trường hợp "" => Không trường hợp s => Một số (s) }

+0

Tôi không thể sử dụng sơ đồ phẳng vì một số lý do .. – Siva

+0

ow lines.flatMap {case "" => Nil case s => Seq (s)} như vậy? – crak

0

val tokenizedLines = (lines.map (Tokenizer.tokenize)) lọc. (_.nonEmpty)

10

Câu trả lời chấp nhận hiện nay, sử dụng filternonEmpty, gánh chịu một số hình phạt hiệu suất vì nonEmpty không phải là một phương pháp trên String, nhưng thay vào đó, nó được thêm vào thông qua chuyển đổi ngầm. Với các đối tượng giá trị được sử dụng, tôi mong đợi sự khác biệt là gần như không thể nhận thấy, nhưng trên các phiên bản của Scala, nơi mà không phải là trường hợp, nó là một hit đáng kể.

Thay vào đó, người ta có thể sử dụng này, được yên tâm là nhanh hơn:

tokenizedLines.filterNot(_.isEmpty) 
Các vấn đề liên quan