如何将RDD [String]中的字段映射到广播?

时间:2016-09-07 21:02:42

标签: scala apache-spark apache-spark-sql rdd broadcast

如何从具有特定字段的RDD[String]List个地图获取特定字段。我有RDD[String]org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[19]每个条目都是以这种格式的JSON:

{
  count: 1,
  itemId: "1122334",
  country: {
    code: {
      preferred: "USA"
    },
    name: {
      preferred: "America"
    }
  },
  states: "50",
  self: {
    otherInfo: [

    ],
    preferred: "National Parks"
  },
  Rating: 4  
}

如何获取仅以itemId为键,self.preferred为值{itemid , self.preferred})的地图列表:

itemId : 1122334 self.preferred : "National Parks"
itemId : 3444444 self.preferred : "State Parks"
...

在所有节点上广播生成的地图是否有效?我需要通过进一步的计算来共享/引用这个地图。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

matched.groups()

广播:

    val filteredMappingsList = countryMapping.filter(x=> {
    val jsonObj = new JSONObject(x)
    jsonObj.has("itemId") 

})

val finalMapping = filteredMappingsList.map(x=>{
    val jsonObj = new JSONObject(x);
    val itemId = jsonObj.get("itemId").toString()
    val preferred = jsonObj.getJSONObject("self").get("preferred").toString()
    (itemId, preferred)
}).collectAsMap