Spark scala RDD обход

Как я могу пройти по RDD, используя Spark scala. Я хочу напечатать каждое значение, присутствующее в Seq, с соответствующим ключом

res1: org.apache.spark.rdd.RDD[(java.lang.String, Seq[java.lang.String])] = MapPartitionsRDD[6] at groupByKey at <console>:14

Я попробовал следующий код для него.

val ss=mapfile.map(x=>{  
val key=x._1
val value=x._2.sorted
  var i=0
 while (i < value.length) {
   (key,value(i))
    i += 1
      }
    }     
  )
ss.top(20).foreach(println)

person Ayush    schedule 02.09.2014    source источник


Ответы (2)


Я пытаюсь преобразовать ваши коды следующим образом:

val ss = mapfile.flatMap { 
  case (key, value) => value.sorted.map((key, _))
}
ss.top(20).foreach(println)

Это то, что вы хотите?

person zsxwing    schedule 03.09.2014
comment
Редактирование стиля @samthebest, подобное вашему, где исходное форматирование было абсолютно хорошим, обычно не одобряется: meta.stackoverflow.com/questions/263115/ - person Michael Zajac; 06.09.2014
comment
@LimbSoup мои изменения явно и объективно лучше. Intellij выполнил бы изменения форматирования, т.е. добавил бы пробел и новую строку. Возможно, это удаление ненужного имени значения параметра в лямбде, которое вы считаете «личным предпочтением», однако я бы сказал, что это общий принцип программирования; KISS, не называй то, что не нуждается в именах - зачем раздувать код?! - person samthebest; 07.09.2014
comment
@samthebest Ясно и объективно, что лучше означает, что код изначально не форматировался. Ссылка на то, что сделал бы Intellij, недействительна. Не все так пишут. В связанном сообщении на Meta четко говорится, что перемещение фигурных скобок на новые строки для исправления форматирования не одобряется. Что касается разницы между именованными значениями и символами подчеркивания, это также является личным предпочтением. То, что вы считаете раздутым, кому-то другому может понравиться. - person Michael Zajac; 07.09.2014
comment
Настройки стиля @LimbSoup Intellij по умолчанию точно соответствуют руководству по стилю, в котором указаны значения функций ... Само объявление должно примерно соответствовать стилю объявления для методов, с открывающей фигурной скобкой в ​​той же строке, что и присваивание или вызов, а закрывающая скобка на отдельной строке сразу после последней строки функции. docs.scala-lang.org/style/declarations.html Наконец-то подумать опускание пробела перед фигурной скобкой почти так же нелепо, как утверждение, что между операторами не должно быть пробелов! - person samthebest; 07.09.2014

Я пробовал это, и он работает для возвращаемого типа, как уже упоминалось.

val ss=mapfile.map(x=>{case (key, value) => value.sorted.map((key, _))}.groupByKey().map(x=>(x._1,x._2.toSeq))

    ss.top(20).foreach(println)

Примечание: ss имеет тип ::: org.apache.spark.rdd.RDD[(java.lang.String, Seq[java.lang.String])]

person SDas    schedule 20.12.2018