我正在研究RDD之间的一系列连接,并且在几次连接之后,从索引访问每个元素真的很混乱。以下是我加入的RDD。这只是一个简单的例子。实际上它可能会变得更难看。
res41: org.apache.spark.rdd.RDD[(String, ((String, Double), Double))]
我可以:
为RDD中的每个元素命名,然后访问它们?
删除图层并将所有元素展平为逗号分隔值?我知道flatMap可能会有所帮助,但不知道如何使用它。
任何帮助将不胜感激
答案 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]