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

How to map fields in RDD[String] to broad cast?

如何将特定字段从 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"
...

在所有节点上广播生成的地图是否有效?通过进一步计算,我需要这张地图 shared/referenced。

你可以试试:

    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

广播:

val broadcastedAsins = sc.broadcast(finalMapping)