Spark Scala [для l oop, встроенный с if-else], как я не могу получить дубликат массива - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь посчитать некоторые определенные слова в уровне массива RDD. Это почти на полпути сделано. Однако результат показывает не совсем то, что я ищу.

Я имею дело с комментарием к обзору вин вроде

var aa = dataset.map(c => c(2))

Array[String] = Array("This tremendous 100% varietal wine hails from Oakville and was aged over three years in oak. Juicy red-cherry fruit and a compelling hint of caramel greet the palate, "Ripe aromas of fig, "Mac Watson honors the memory of a wine once made by his mother in this tremendously delicious, "This spent 20 months in 30% new French oak, "This is the top wine from La Bégude, "Deep,

Я пытаюсь подсчитать количество определенных слов в списке

var positive_list= List( "tremendously","delicious")
var sum=0

var rr=aa.map(column =>
                 for (i <- positive_list) yield { 
                    if(column.contains(i)){
                      sum=sum+1
                      (column,sum)
                    } else {
                      (column,0)
                    }
                 })

rr.take(50)

Результат:

Array(List(("This tremendous 100% varietal wine hails from Oakville and was aged over three years in oak. Juicy red-cherry fruit and a compelling hint of caramel greet the palate,0), ("This tremendous 100% varietal wine hails from Oakville and was aged over three years in oak. Juicy red-cherry fruit and a compelling hint of caramel greet the palate,0)), List(("Ripe aromas of fig,0), ("Ripe aromas of fig,0)), List(("Mac Watson honors the memory of a wine once made by his mother in this tremendously delicious,1), ("Mac Watson honors the memory of a wine once made by his mother in this tremendously delicious,2))

Как видите. Есть несколько дубликатов, которые мне не нужны. Я знаю, это потому, что [yield] будет возвращать результат каждый раз в al oop, но я не могу удалить его, иначе я не получу ничего в списке.

Есть какая-нибудь идея, которую я могу сделать?

1 Ответ

1 голос
/ 06 января 2020

Для каждого элемента в positive_list вы создаете запись с параметром для l oop. Я предполагаю, что вы хотите сопоставить свой отзыв с количеством положительных слов, которые он содержит (поэтому только одна запись за отзыв). Вы можете сделать это, используя count на positive_list:

var rr=aa.map(column => column -> positive_list.count(column.contains))
...