从已连接的RDD中删除图层并为元素指定名称

时间:2015-08-17 12:07:01

标签: scala apache-spark

我正在研究RDD之间的一系列连接,并且在几次连接之后,从索引访问每个元素真的很混乱。以下是我加入的RDD。这只是一个简单的例子。实际上它可能会变得更难看。

res41: org.apache.spark.rdd.RDD[(String, ((String, Double), Double))]

我可以:

  1. 为RDD中的每个元素命名,然后访问它们?

  2. 删除图层并将所有元素展平为逗号分隔值?我知道flatMap可能会有所帮助,但不知道如何使用它。

  3. 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您没有提到您正在使用的编程语言,但在Scala中,您可以通过声明案例类并将RDD映射到它来展平和命名字段:

  val conf = new SparkConf().setMaster("local").setAppName("example")
  val sc = new SparkContext(conf)

  val data = List(
    ("abc", (("x", 12.3), 23.4)),
    ("def", (("y", 22.3), 24.4)),
    ("jkl", (("z", 32.3), 25.4))
  )

  val rdd = sc.parallelize(data)

  case class MyDataStructure(field1: String, field2: String, field3: Double, field4: Double)

  val caseRDD = data.map {
    case (f1, ((f2, f3), f4)) => MyDataStructure(f1, f2 , f3, f4)
  }

  caseRDD //has type RDD[MyDataStructure]