2016-04-15 2 views
2

Есть ли способ фильтрации с одним выражением строки, содержащие слово «слово1» или другой «WORD2» что-то вроде:фильтр линии по двум словам Спарк Streaming

val res = lines.filter(line => line.contains("word1" or "word2")) 

, потому что это выражение Безразлично» т работы.

Спасибо заранее

ответ

4

Если линия является String оптимальным выбором будет регулярное выражение:

val pattern = "word1|word2".r 

lines.filter(line => pattern.findFirstIn(line).isDefined) 

в противном случае (другой тип последовательности), вы можете использовать Seq.exists:

lines.filter(line => Seq("foo", "bar").exists(s => line.contains(s))) 

, который принимает одиночный, который отображает от элемента к булевому (здесь (String) ⇒ Boolean) и:

проверяет, сохраняется ли предикат для хотя бы одного элемента этой итерабельной коллекции.

Смежные вопросы