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

64
6

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

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

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

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 6 месяцев, 1 неделя назад
45

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

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

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

Ответ на нуль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 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

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