Можем ли мы использовать foreach внутри карты в Scala? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть RDD [(String, List [String])]

Я хотел бы провести l oop через список внутри RDD для каждой записи. Возможно ли это?

RDD has this data
(4,List(5, 6, 7, 1, 3))
(8,List(9, 5, 7))
(5,List(8, 9, 6, 4))
(9,List(5, 10, 8))
(1,List(4, 3))
(6,List(5, 4, 2, 3, 10))
(2,List(3, 6))
(7,List(10, 8, 4))
(3,List(4, 6, 1, 2))
(10,List(6, 7, 9))

Я бы хотел получить проекции ключей в этом списке на 2 скачка. К каждому элементу в списке значений должен быть прикреплен свой собственный список из СДР.

Результирующий СДР для Первый элемент списка должен быть

(4,List((5,List(8, 9, 6, 4)), (6,List(5, 4, 2, 3, 10)), (7,List(10, 8, 4)), (1,List(4, 3)), (3,List(4, 6, 1, 2))))

Здесь (5 , List (8, 9, 6, 4) - это inturn, взятый из RDD

Аналогично для всех записей

1 Ответ

0 голосов
/ 27 марта 2020

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

myRDD.map({case (node,p1Array) => (node, p1Array.map(k => myRDDArray.filter(y=> y._1 == k)(0)))})

Результат:

(8,List((9,List(5, 10, 8)), (5,List(8, 9, 4, 6)), (7,List(10, 8, 4))))
(4,List((7,List(10, 8, 4)), (1,List(4, 3)), (3,List(1, 2, 4, 6)), (5,List(8, 9, 4, 6)), (6,List(10, 5, 4, 2, 3))))
(5,List((6,List(10, 5, 4, 2, 3)), (8,List(9, 5, 7)), (9,List(5, 10, 8)), (4,List(7, 1, 3, 5, 6))))
(9,List((5,List(8, 9, 4, 6)), (10,List(6, 7, 9)), (8,List(9, 5, 7))))
(1,List((4,List(7, 1, 3, 5, 6)), (3,List(1, 2, 4, 6))))
(6,List((10,List(6, 7, 9)), (5,List(8, 9, 4, 6)), (4,List(7, 1, 3, 5, 6)), (2,List(3, 6)), (3,List(1, 2, 4, 6))))
(2,List((3,List(1, 2, 4, 6)), (6,List(10, 5, 4, 2, 3))))
(7,List((10,List(6, 7, 9)), (8,List(9, 5, 7)), (4,List(7, 1, 3, 5, 6))))
(3,List((4,List(7, 1, 3, 5, 6)), (6,List(10, 5, 4, 2, 3)), (1,List(4, 3)), (2,List(3, 6))))
(10,List((6,List(10, 5, 4, 2, 3)), (7,List(10, 8, 4)), (9,List(5, 10, 8))))
...