说明:一般用户常用的是GenericRowData。flink内部则多使用BinaryRowData。
方法一、循环解决(不推荐):
代码较为复杂需要根据RowType获取到内部fields的logicalType,再使用RowData.createFieldGetter方法创建fieldGetters。
public static void copyRowData(RowData input, GenericRowData output, List<RowData.FieldGetter> fieldGetters) {
for (int i = 0; i < input.getArity() && i < output.getArity(); i++) {
if (input instanceof GenericRowData) {
output.setField(i, ((GenericRowData) input).getField(i));
} else {
Preconditions.checkArgument(fieldGetters != null);
Object value = fieldGetters.get(i).getFieldOrNull(input);
output.setField(i, value);
}
}
}
方法二、使用RowDataSerializer(推荐)
使用RowDataSerializer.copy方法
public RowDataSerializer(RowType rowType) {
...
}
public RowData copy(RowData from) {
...
}
本文介绍了在ApacheFlink中,如何高效地复制RowData,包括使用复杂循环的方式和推荐的RowDataSerializer方法,强调了后者的简洁性和性能优势。
1万+

被折叠的 条评论
为什么被折叠?



