in parquet-cli/src/main/java/org/apache/parquet/cli/csv/RecordBuilder.java [140:193]
private static Object makeValue(String string, Schema schema) {
if (string == null) {
return null;
}
try {
switch (schema.getType()) {
case BOOLEAN:
return Boolean.valueOf(string);
case STRING:
return string;
case FLOAT:
return Float.valueOf(string);
case DOUBLE:
return Double.valueOf(string);
case INT:
return Integer.valueOf(string);
case LONG:
return Long.valueOf(string);
case ENUM:
// TODO: translate to enum class
if (schema.hasEnumSymbol(string)) {
return string;
} else {
try {
return schema.getEnumSymbols().get(Integer.parseInt(string));
} catch (IndexOutOfBoundsException ex) {
return null;
}
}
case UNION:
Object value = null;
for (Schema possible : schema.getTypes()) {
value = makeValue(string, possible);
if (value != null) {
return value;
}
}
return null;
case NULL:
return null;
default:
// FIXED, BYTES, MAP, ARRAY, RECORD are not supported
throw new RecordException("Unsupported field type:" + schema.getType());
}
} catch (NumberFormatException e) {
// empty string is considered null for numeric types
if (string.isEmpty()) {
return null;
} else {
throw e;
}
}
}