2017-02-15 22 views
0

我有2 HashMap的,我在那裏分組成一個單一的HashMap分組到N多包含HashMap到apache的星火JavaPairRDD

Map<String, List<String>> map1 = new HashMap<>(); 
    Map<String, List<String>> map2 = new HashMap<>(); 

    Map<String, List<String>> result = new HashMap<>(); 

    map1.keySet().stream().forEach(key -> { 
     List<String> val = result.get(key); 
     if (val == null) { 
      val = new ArrayList<String>(); 
      result.put(key, val); 
     } else { 
      val.addAll(map1.get(key)); 
      result.put(key, val); 
     } 
    }); 
    map2.keySet().stream().forEach(key -> { 
     List<String> val = result.get(key); 
     if (val == null) { 
      val = new ArrayList<String>(); 
      result.put(key, val); 
     } else { 
      val.addAll(map2.get(key)); 
      result.put(key, val); 
     } 
    }); 

現在我想要做同樣的使用Apache的火花,創造JavaPairRDD>。如果我有N個這樣的哈希表並將它們分組到JavaPairRD>中,如何實現它?

回答

0

首先,您需要將您的每個HashMap轉換爲JavaPairRDD。 爲此,請將您的HashMap轉換爲Tuple2的數組,並使用JavaSparkContext.parrallelizePairs

然後,在所有JavaPairRDD之間做一個union,這會得到一個單一的RDD,包含所有地圖中的所有條目。

最後,您可以使用groupByKey來分組條目,但這取決於您接下來要做什麼,因爲reduceByKey可能會更好。