Как преобразовать RDD в другой RDD, используя свойство класса case? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть СДР, как показано ниже, с именем: other_nodes :

(4,(1,true))
(22,(1,true))
(14,(1,true))
(3,(1,true))
(8,(1,true))
(18,(1,true))

Я написал класс case, как показано ниже, и применил его к графику, и он дал желаемый результат:

case class nodes_properties(label:Int, isVisited:Boolean=false)

когда я применяю кейс на график, его результат выглядит следующим образом:

(1,nodes_properties(15,false))
(2,nodes_properties(11,false))
(3,nodes_properties(9,false))

Проблема: как я могу применить класс кейса, который я определил, на other_nodes RDD, чтобы получить результат, как показано ниже:

(4,nodes_properties(1,true))
(22,nodes_properties(1,true))
(14,nodes_properties(1,true))
(3,nodes_properties(1,true))
(8,nodes_properties(1,true))
(18,nodes_properties(1,true))

1 Ответ

1 голос
/ 05 марта 2020

Это решение может работать:

scala> val data = sc.parallelize(Seq((4,(1, true)),(22,(1,true))))
data: org.apache.spark.rdd.RDD[(Int, (Int, Boolean))] = ParallelCollectionRDD[72] at parallelize at <console>:39

scala> data.take(2)
res27: Array[(Int, (Int, Boolean))] = Array((4,(1,true)), (22,(1,true)))

scala> val data1 = data.map(elem => (elem._1, nodes_properties(elem._2._1, elem._2._2)))
data1: org.apache.spark.rdd.RDD[(Int, nodes_properties)] = MapPartitionsRDD[73] at map at <console>:42

scala> data1.take(2)
res28: Array[(Int, nodes_properties)] = Array((4,nodes_properties(1,true)), (22,nodes_properties(1,true)))

РЕДАКТИРОВАТЬ

Проблема в том, что каждый элемент в others_rdd имеет тип (VertexId, Any). Вам нужно преобразовать в тип (VertexId, (Int, Boolean)), чтобы ваш класс наблюдений мог применяться. Это можно сделать следующим образом:

val newRdd = others_rdd.map(elem => (elem._1, elem._2.asInstanceOf[(Int,Boolean)]))

После выполнения этого вы можете применить решение, как показано выше, сопоставив класс node_properties.

Дайте мне знать, если это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...