我有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)
请建议可以替代解决这个问题的方法吗?
答案 0 :(得分:0)
以下内容应该得到您想要的输出
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)