/ / NullPointerException w Custom Dstinct Mapper - hazelcast, hazelcast-imap

NullPointerException w Custom Dstinct Mapper - hazelcast, hazelcast-imap

Używam hazelcast 3.6.1 i wdrażam odmienną funkcjonalność agregacji przy użyciu niestandardowego mapreduce, aby uzyskać wyniki typu solr.

public class DistinctMapper implements Mapper<String, Employee, String, Long>{

private transient SimpleEntry<String, Employee> entry = new SimpleEntry<String, Employee>();

private static final Long ONE = Long.valueOf(1L);

private Supplier<String, Employee, String> supplier;

public DistinctMapper(Supplier<String, Employee, String> supplier) {
this.supplier = supplier;
}

@Override
public void map(String key, Employee value, Context<String, Long> context) {
System.out.println("Object "+ entry + " and key "+key);
entry.setKey(key);
entry.setValue(value);
String fieldValue = (String) supplier.apply(entry);
//getValue(value, fieldName);
if (null != fieldValue){
context.emit(fieldValue, ONE);
}
}
}

a mapper nie działa z NullPointerException. i instrukcja sysout mówi, że obiekt wejściowy ma wartość NULL.

SimpleEntry: https://github.com/hazelcast/hazelcast/blob/v3.7-EA/hazelcast/src/main/java/com/hazelcast/mapreduce/aggregation/impl/SimpleEntry.java

Czy możesz mi wskazać problem w powyższym kodzie? Dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

entry pole jest przejściowe. Oznacza to, że nie jest serializowany, więc kiedy DistinctMapperobiekt jest deserializowany na niebezpiecznym węźle, jego wartość jest null. Usunięcie stanu przejściowego rozwiąże problem NullPointerException.

Na marginesie: Dlaczego potrzebujesz tego pola wprowadzania? Wygląda na to, że nie ma sensu.