【问题标题】:Spark-Scala RDDSpark-Scala RDD
【发布时间】:2015-10-31 15:06:55
【问题描述】:

我有一个 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)))

这给了我一个错误:

错误:值映射不是 Char 的成员

我了解这是因为该地图功能仅适用于RDDs,而不适用于每个string/char。请帮助我在Spark 中使用嵌套函数来实现此目的。

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    分解问题。

    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)

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 2021-03-14
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 2016-12-16
      • 2018-03-03
      • 2016-03-06
      • 2014-07-12
      相关资源
      最近更新 更多