Spark-Scala RDD

Spark-Scala RDD

我有一个具有以下架构的 RDD RDD1

RDD[String, Array[String]] 

(姑且称之为RDD1

我想创建一个新的 RDD RDD2,每一行都是 RDD[String,String],键和值属于 RDD1

例如:

RDD1 =Array(("Fruit",("Orange","Apple","Peach")),("Shape",("Square","Rectangle")),("Mathematician",("Aryabhatt"))))

我希望输出为:

RDD2 = Array(("Fruit","Orange"),("Fruit","Apple"),("Fruit","Peach"),("Shape","Square"),("Shape","Rectangle"),("Mathematician","Aryabhatt"))

有人可以帮我处理这段代码吗?

我的尝试:

val R1 = RDD1.map(line => (line._1,line._2.split((","))))
val R2 = R1.map(line => line._2.foreach(ph => ph.map(line._1)))

这给了我一个错误:

error: value map is not a member of Char

我理解是因为那个map函数只适用于RDDs,而不适用于每个string/char。请帮助我在 Spark.

中为此目的使用嵌套函数的方法

分解问题

  1. ("Fruit",Array("Orange","Apple","Peach") -> Array(("Fruit", "Orange"), ("Fruit", "Apple"), ("Fruit", "Peach"))

def flattenLine(line: (String, Array[String])) = line._2.map(x => (line._1, x)

  1. 将该函数应用于您的 rdd:

rdd1.flatMap(flattenLine)