in parquet-protobuf/src/main/java/org/apache/parquet/proto/ProtoMessageConverter.java [294:358]
protected Converter newScalarConverter(
ParentValueContainer pvc,
Message.Builder parentBuilder,
Descriptors.FieldDescriptor fieldDescriptor,
Type parquetType) {
JavaType javaType = fieldDescriptor.getJavaType();
switch (javaType) {
case STRING:
return new ProtoStringConverter(pvc);
case FLOAT:
return new ProtoFloatConverter(pvc);
case DOUBLE:
return new ProtoDoubleConverter(pvc);
case BOOLEAN:
return new ProtoBooleanConverter(pvc);
case BYTE_STRING:
return new ProtoBinaryConverter(pvc);
case ENUM:
return new ProtoEnumConverter(pvc, fieldDescriptor);
case INT:
return new ProtoIntConverter(pvc);
case LONG:
return new ProtoLongConverter(pvc);
case MESSAGE: {
if (parquetType.isPrimitive()) {
// if source is a Primitive type yet target is MESSAGE, it's probably a wrapped message
Descriptor messageType = fieldDescriptor.getMessageType();
if (messageType.equals(DoubleValue.getDescriptor())) {
return new ProtoDoubleValueConverter(pvc);
}
if (messageType.equals(FloatValue.getDescriptor())) {
return new ProtoFloatValueConverter(pvc);
}
if (messageType.equals(Int64Value.getDescriptor())) {
return new ProtoInt64ValueConverter(pvc);
}
if (messageType.equals(UInt64Value.getDescriptor())) {
return new ProtoUInt64ValueConverter(pvc);
}
if (messageType.equals(Int32Value.getDescriptor())) {
return new ProtoInt32ValueConverter(pvc);
}
if (messageType.equals(UInt32Value.getDescriptor())) {
return new ProtoUInt32ValueConverter(pvc);
}
if (messageType.equals(BoolValue.getDescriptor())) {
return new ProtoBoolValueConverter(pvc);
}
if (messageType.equals(StringValue.getDescriptor())) {
return new ProtoStringValueConverter(pvc);
}
if (messageType.equals(BytesValue.getDescriptor())) {
return new ProtoBytesValueConverter(pvc);
}
}
Message.Builder subBuilder = parentBuilder.newBuilderForField(fieldDescriptor);
return new ProtoMessageConverter(conf, pvc, subBuilder, parquetType.asGroupType(), extraMetadata);
}
}
throw new UnsupportedOperationException(
String.format("Cannot convert type: %s" + " (Parquet type: %s) ", javaType, parquetType));
}