Flink 的 "TypeSerializerOutputFormat" 一起写入奇怪的二进制数据

Flink's "TypeSerializerOutputFormat" writes weird binary data together

我使用 Flink 生成数组数据以供其他应用程序使用。 (我不需要数组的任何元信息) 我对比了Flink生成的二进制数据和文本数据,发现二进制数据中有一个奇怪的数据。

val bin_output_format = new TypeSerializerOutputFormat[(Long, Long)]  
bin_output_format.setWriteMode (WriteMode.OVERWRITE)
bin_output_format.setOutputFilePath(new Path (s"${outDir}/NAME_Binary")) 

tuple_pair_list.map { tuple => tuple._1 + "\t" + tuple._2}.writeAsText(s"${outDir}/NAME_TXT", WriteMode.OVERWRITE)                        
tuple_pair_list.output (bin_output_format)
  1. 如何删除二进制文件末尾的元信息? (貌似条目数)

  2. 为什么里面有一些错误的数据?我可以删除它们吗?可以看下图两者的区别(两个(127, -1 , -1)和一个NULL)

我是不是漏掉了什么?

Flink 的 TypeSerializerOutputFormat 旨在与 TypeSerializerInputFormat 协同工作并允许并行文件扫描。 Flink 使用它的内部序列化器进行二进制编码。其中一些序列化程序基于 Avro 和 Kryo 等外部库。每当 Flink 的序列化器(或使用的库)的内部实现发生变化时,编码可能会发生变化。此外,输出格式在固定块边界对齐数据,并在记录跨越边界时使用填充。

因此,TypeSerializerOutputFormat 的输出不打算被其他工具或阅读器使用。我会实施自定义 OutputFormat