如何通过提取特定值从另一个RDD创建RDD?

时间:2016-01-25 08:59:54

标签: json scala apache-spark

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

1 个答案:

答案 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中。