[ML] Fix text structure NPE when fields in list have null value (#125922) (#127508)
Validate Gradle Wrapper / Validation (push) Has been cancelled
Details
Validate Gradle Wrapper / Validation (push) Has been cancelled
Details
Co-authored-by: weizijun <weizijun.wzj@alibaba-inc.com>
This commit is contained in:
parent
4c86ee4277
commit
dbcbbbd0bc
|
@ -0,0 +1,5 @@
|
||||||
|
pr: 125922
|
||||||
|
summary: Fix text structure NPE when fields in list have null value
|
||||||
|
area: Machine Learning
|
||||||
|
type: bug
|
||||||
|
issues: []
|
|
@ -23,6 +23,7 @@ import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
@ -329,7 +330,7 @@ public final class TextStructureUtils {
|
||||||
|
|
||||||
List<Object> fieldValues = sampleRecords.stream()
|
List<Object> fieldValues = sampleRecords.stream()
|
||||||
.map(record -> record.get(fieldName))
|
.map(record -> record.get(fieldName))
|
||||||
.filter(fieldValue -> fieldValue != null)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
Tuple<Map<String, String>, FieldStats> mappingAndFieldStats = guessMappingAndCalculateFieldStats(
|
Tuple<Map<String, String>, FieldStats> mappingAndFieldStats = guessMappingAndCalculateFieldStats(
|
||||||
|
@ -425,7 +426,10 @@ public final class TextStructureUtils {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Collection<String> fieldValuesAsStrings = fieldValues.stream().map(Object::toString).collect(Collectors.toList());
|
Collection<String> fieldValuesAsStrings = fieldValues.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(Object::toString)
|
||||||
|
.collect(Collectors.toList());
|
||||||
Map<String, String> mapping = guessScalarMapping(
|
Map<String, String> mapping = guessScalarMapping(
|
||||||
explanation,
|
explanation,
|
||||||
fieldName,
|
fieldName,
|
||||||
|
|
|
@ -1106,6 +1106,16 @@ public class TextStructureUtilsTests extends TextStructureTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testGuessMappingWithNullValue() {
|
||||||
|
Map<String, String> expected = Collections.singletonMap(TextStructureUtils.MAPPING_TYPE_SETTING, "keyword");
|
||||||
|
|
||||||
|
Consumer<Boolean> testGuessMappingGivenEcsCompatibility = (ecsCompatibility) -> {
|
||||||
|
assertEquals(expected, guessMapping(explanation, "foo", Arrays.asList("ERROR", null, "DEBUG"), ecsCompatibility));
|
||||||
|
};
|
||||||
|
|
||||||
|
ecsCompatibilityModes.forEach(testGuessMappingGivenEcsCompatibility);
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, String> guessMapping(
|
private Map<String, String> guessMapping(
|
||||||
List<String> explanation,
|
List<String> explanation,
|
||||||
String fieldName,
|
String fieldName,
|
||||||
|
|
Loading…
Reference in New Issue