2016-09-08 8 views
1

RDD [String]から特定のフィールドのhashMapを作成するにはどうすればよいですか?RDD [文字列]から特定のフィールドのhashMapを作成する方法は?

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

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

    } 

Ho do I get a hashmap maps which have {itemid , self.preferred} : 

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

私はJSONのObjに変換し、解析をやっているので、私は、効率的なその作業、これを試みたがありません:

val filteredMappingsList = countryMapping.filter(x=> { 
    val jsonObj = new JSONObject(x) 
    jsonObj.has("itemId") && jsonObj.get("itemId").toString.startsWith("11") 

}) 

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 

は、これを効率的に行うための任意の他の方法はありますか?

答えて

0

多くのJSONライブラリのうちの1つを使用してデータを解析するのはおそらく最良の方法でしょう。しかし、JSONに文字列を2回(1回はフィルタで、1回はマップ内で)解析するようです。それが実際に実行されるかどうかはわかりません。ただし、一度解析するだけで十分です。

val result = countryMapping.map(x => newJSONObject(x)). 
       filter(jsonObj => ...). 
       map{jsonObj => 
       ... 
       (itemId, preferred) 
       }.collectAsMap 
関連する問題