взорвать Key-Values ​​в пару ключ-значение scala - PullRequest
0 голосов
/ 03 июня 2018

У меня есть 3 строки для ввода, которые имеют ключ и значения сгруппированы.Теперь нужно разгруппировать значения для каждой пары ключ-значение.

Пример ввода

LKG, LK1, 10, LK2, 20, LK3, 30    
UKG, UK1, 20, UK2, 10, UK5 

SRKG, SRK4, 30, SRK10, 5

Ожидаемый результат

LKG,LK1

LKG,LK2

LKG,LK3

UKG,UK1

UKG,UK2

UKG,UK5

SRKG,SRK4

SRKG,SRK10

ПРИМЕЧАНИЕ: целочисленные значения, такие как 10,20,30 не должно иметь никакой пары ключ-значение в выходных данных

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

    val data = """
    LKG, LK1, 10, LK2, 20, LK3, 30
    UKG, UK1, 20, UK2, 10, UK5
    SRKG, SRK4, 30, SRK10, 5""".trim

    val records = sc.parallelize(data.split('\n'))

    val pairs = records.map(x => (x.split(',')(0), x))

val groupedRDD = pairs.flatMap{case(k, v)=> v.split(",").map(x => (k, x))}
groupedRDD.collect().foreach(println)

Пожалуйста, предложите, что может быть альтернативой для решения этой проблемы?

1 Ответ

0 голосов
/ 03 июня 2018

следующее должно получить желаемый результат

val data = """
LKG, LK1, 10, LK2, 20, LK3, 30
UKG, UK1, 20, UK2, 10, UK5
SRKG, SRK4, 30, SRK10, 5""".trim

data.split("\n").map(_.split(",").filterNot(_.trim.forall(_.isDigit))).flatMap(x => x.tail.map(y => (x(0).trim, y.trim)))

вызов .foreach(println) должен дать вам

(LKG,LK1)
(LKG,LK2)
(LKG,LK3)
(UKG,UK1)
(UKG,UK2)
(UKG,UK5)
(SRKG,SRK4)
(SRKG,SRK10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...