求助:如何将给定 Java 基本类型的 Class 对象转换为 Flink 的 DataType?

299 天前
 NewConn

如何将给定 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();
        }
        ...
}
991 次点击
所在节点    程序员
1 条回复
XJohn
299 天前
你们是想做低代码,运行时判断字段类型么?那可以提前生成 schema 。(比如 JsonRowDeserializationSchema )
如果是编译期就能确定类型的话直接用 TypeInformation.of()就可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011593

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX