Преобразование Iterable [(Double, Double)] в Seq (Seq (Double)) - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу преобразовать значения "myRDD" для пары RDD из Iterable [(Double, Double)] в Seq (Seq (Double)), однако я не уверен, как это сделать.Я попробовал следующее, но это не работает.

val groupedrdd: RDD[BB,Iterable[(Double,Double)]] = RDDofPoints.groupByKey()
val RDDofSeq = groupedrdd.mapValues{case (x,y) => Seq(x,y)}

myRDD формируется с использованием операции groupByKey для RddofPoints с соответствующими ограничивающими прямоугольниками в качестве ключей.BB является классом кейсов и является ключом для набора точек с типом (Double, Double).Я хочу, чтобы RDDofSeq имел тип RDD [BB, Seq (Seq (Double))], однако после groupByKey myRDD имеет тип RDD [BB, Iterable [(Double, Double)]].

Здесь, выдает ошибку:

Error:(107, 58) constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: Iterable[(Double, Double)]

Я новичок в Scala, любая помощь в этом отношении приветствуется.Спасибо.

ОТВЕТ : Для достижения вышеуказанной цели используется следующее:

val RDDofSeq = groupedrdd.mapValues{iterable => iterable.toSeq.map{case (x,y) => Seq(x,y)}}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вам просто нужно map, а не mapValues.

val RDDofSeq = myRDD.map{case (x,y) => Seq(x,y)}
0 голосов
/ 14 февраля 2019

Я пробовал это на Scalafiddle

val myRDD: Iterable[(Double,Double)] = Seq((1.1, 1.2), (2.1, 2.2))

val RDDofSeq = myRDD.map{case (x,y) => Seq(x,y)}

println(RDDofSeq) // returns List(List(1.1, 1.2), List(2.1, 2.2))

Единственное отличие состоит в том, что я использовал myRDD.map(.. вместо myRDD.mapValues(..

Убедитесь, что myRDDдействительно имеет тип Iterable[(Double,Double)]!

Обновление после комментария:

Если я правильно вас понимаю, вы хотите Seq[Double], а не Seq[Seq[Double]]

Это было бы так:

val RDDofSeq = myRDD.map{case (k,v) => v} // returns List(1.2, 2.2)

Обновление после сброса типа теперь:

Значения имеют тип Iterable[(Double,Double)], поэтому вы не можете соответствоватьна пару.

Попробуйте это:

 val RDDofSeq = groupedrdd.mapValues{iterable => 
 Seq(iterable.head._1, iterable.head._2)}
...