我有一个包含String和JSON对象(作为String)的RDD。我从JSON对象中提取了所需的值。如何使用这些值创建一个新的RDD,用于存储每列中的每个值?
RDD
(1234,{"id"->1,"name"->"abc","age"->21,"class"->5})
从中生成地图如下所示。
"id"->1,
"name"->"abc",
"age"->21
"id"->2,
"name"->"def",
"age"->31
如何将其转换为RDD [(String,String,String)],它存储如下数据:
1 abc 21
2 def 31
答案 0 :(得分:1)
现在不在编译器之前,但这样的事情应该有效:
def parse(val row: (String, JValue)) : Seq((String, String, String)) = {
// Here goes your code to parse a Json into a sequence of tuples, seems like you have this already well in hand.
}
val rdd1 = ??? // Initialize your RDD[(String, JValue)]
val rdd2: RDD[(String, String, String)] = rdd1.flatMap(parse)
flatMap
可以解决问题,因为你的提取函数可以在每个Json输入上提取多行(或者没有),并且它们将无缝地集成到最终的RDD中。