将RDD解析为键/值对

时间:2019-08-08 18:10:47

标签: scala apache-spark apache-spark-sql

我的csv文件中有如下数据

键1,a1、10,a2、20,a3、30

键2,b1、50,b2、60

创建一个RDD并转换成另一个RDD,其中o / p应该如下所示

Key-1,a1

键1,a2

Key-1,a3

Key-2,b1

Key-2,b2

1 个答案:

答案 0 :(得分:1)

请根据上述示例找到以下代码。

val rdd = sc.textFile("path to the csv file") // here sc is sparkContext
val rdd1 = rdd.mapPartitions(itr => {
      itr.map(_.split(",")).map(_.toList).map(list => (list.head, list.tail))
 })
val rdd2 = rdd1.mapValues(tail => tail.zipWithIndex).map(tuple => (tuple._1, 
       tuple._2.filter(x => x._2 % 2 ==0).map(_._1)))
val rdd3 = rdd2.mapPartitions(itr => {
      itr.flatMap(xx => xx._2.map(k => (xx._1, k)))
})
rdd3.foreach(println)
(Key-2, b1)
(Key-2, b2)
(Key-1, a1)
(Key-1, a2)
(Key-1, a3)

相关问题