2016-09-26 23 views
1

各RDDをNavigableMapに変換し、無名関数でList<NavigableMap<byte[], List<Map<String, String>>>>に格納する必要があります。私はJavaPairDStream<ImmutableBytesWritable, Put> putsで仕事をしています。私がこれまで持って何RDDをマップリストに変換

Cellはシリアライズではないので

puts.foreachRDD(r -> 
    List<NavigableMap<byte[], List<Cell>>> l = r.map(t -> 
     t._2().getFamilyCellMap()).collect(); 
    return null; 
}); 

これは.collect()で持つNotSerializableExceptionをスローします。

だから私は何とか無名関数でMap<String, StringCellを変換し、.collect()を使用するために私のためList<NavigableMap<byte[], List<Map<String, String>>>>を返却する必要があります。

Java 8の経験があまりないため、この時点でかなり悩まされています。どんな助けもありがとう。

答えて

0

これは私がそれについて行ってしまったところです。 collectingの前にprimitivesが必要でした。私はmapであり、serializableではない.getFamilyCellMap()の戻り値を収集しようとしていました。

次に、assertionsの前にmapに戻しました。ここで

Javaコードです:

puts.foreachRDD(r -> { 
     List<String> l = r.flatMap(t -> { 
        Collection<List<Cell>> collection = t._2().getFamilyCellMap().values(); 
      return collection.stream() 
        .flatMap(Collection::stream) 
        .map(CellUtil::cloneValue)) 
        .collect(Collectors.toList()); 
       }).collect(); 

     //Mapping for testing 
     ObjectMapper objectMapper = new ObjectMapper(); 
     Map<String, Object> map1 = objectMapper.readValue(l.get(1), new TypeReference<Map<String, Object>>(){}); 
     Map<String, Object> map2 = objectMapper.readValue(l.get(2), new TypeReference<Map<String, Object>>(){}); 

     System.out.println(map1); 
     Assert.assertEquals(map1.get("attribute1").toString(), expected1); 
     //etc 
     System.out.println(map2); 
     Assert.assertEquals(map2.get("attribute2").toString(), expected2); 
     //etc 
    } 
    return null; 
}); 

が、これは必要としている誰かがお役に立てば幸いです。

関連する問題