Как удалить строки длиной менее 3 слов?

62
6

У меня есть экземпляр миллионов документов, и я хочу удалить строки, длина которых меньше 3 слов (в Scala и Spark). Как я могу это сделать?

спросил(а) 2021-01-19T19:16:42+03:00 2 месяца, 3 недели назад
1
Решение
61

Все зависит от того, как вы определяете слова, но принимая очень простой подход:

def naiveTokenizer(text: String): Array[String] = text.split("""\s+""")
def naiveWordCount(text: String): Int = naiveTokenizer(text).length

val lines = sc.textFile("README.md")
lines.filter(naiveWordCount(_) >= 3)

ответил(а) 2021-01-19T19:16:42+03:00 2 месяца, 3 недели назад
44

Вы можете использовать функцию count. (Предполагается, что у вас есть ' ' пробелы между словами"):

scala.io.Source.fromFile("myfile.txt").getLines().filter(_.count(' '==) >= 3)

ответил(а) 2021-01-19T19:16:42+03:00 2 месяца, 3 недели назад
44

Ответ на нуль33 действителен, если вы хотите, чтобы строки остались нетронутыми. Тем не менее, если вы хотите, чтобы линии также были маркерными, то flatMap более эффективен.

val lines = sc.textFile("README.md")
lines.flatMap(line =>{
val tokenized = line.split("""\s+""")
if(tokenized.length >= 3) tokenized
else Seq()
})

ответил(а) 2021-01-19T19:16:42+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема