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
.
中为此目的使用嵌套函数的方法
分解问题
("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)
- 将该函数应用于您的 rdd:
rdd1.flatMap(flattenLine)
我有一个具有以下架构的 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
.
分解问题
("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)
- 将该函数应用于您的 rdd:
rdd1.flatMap(flattenLine)