如何将给定 Java 基本类型的 Class 对象转换为 Flink 的 DataType ? 就像这样:
public static RowType convertToDataType(Class<?> pojo) {
...
}
Field[] fields = pojo.getDeclaredFields();
for (Field field : fields) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
String fieldName = field.getName();
DataType fieldType = convertToDataType(field.getType());
RowType.RowField rowField = new RowType.RowField(fieldName, fieldType.getLogicalType());
rowFields.add(rowField);
}
我在 Flink 的内置函数中,没有找到用于转换的方法。 这种情况只能自己写方法吗?类似:
private static DataType convertToDataType(Class<?> clazz) {
if (clazz == CharSequence.class) {
return DataTypes.STRING();
}
if (clazz == String.class) {
return DataTypes.STRING();
}
if (clazz == int.class || clazz == Integer.class) {
return DataTypes.INT();
}
...
}
1
XJohn 301 天前
你们是想做低代码,运行时判断字段类型么?那可以提前生成 schema 。(比如 JsonRowDeserializationSchema )
如果是编译期就能确定类型的话直接用 TypeInformation.of()就可以。 |