首页 > 解决方案 > 使用 Scala、Spark 从输入中提取键值对

问题描述

给定文件中的输入为:

Maths,K1,A1,K2,A2,K3,A4
Physics,L6,M1,L5,M2,L9,M2

使用 Spark 和 Scala,如何将键值对提取为 RDD,如下所示:

Maths, K1
Maths, K2
Maths, K3
Physics, L6
Physics, L5
Physics, L9

标签: scalaapache-spark

解决方案


假设我们可以从您问题中的两个样本中安全地推断出预期结果,并假设输入是一系列字符串,这是实现它的一种方法:

val s = List("Maths,K1,A1,K2,A2,K3,A4","Physics,L6,M1,L5,M2,L9,M2")
val df = s.flatMap(x => {
  val t = x.split(",")
  (1 until t.size by 2).map(t.head -> t(_))
}).toDF("C1", "C2")

结果数据框:

+-------+---+
|     C1| C2|
+-------+---+
|  Maths| K1|
|  Maths| K2|
|  Maths| K3|
|Physics| L6|
|Physics| L5|
|Physics| L9|
+-------+---+

推荐阅读