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)
如何删除二进制文件末尾的元信息?
(貌似条目数)
为什么里面有一些错误的数据?我可以删除它们吗?可以看下图两者的区别(两个(127, -1 , -1)和一个NULL)
我是不是漏掉了什么?
Flink 的 TypeSerializerOutputFormat
旨在与 TypeSerializerInputFormat
协同工作并允许并行文件扫描。 Flink 使用它的内部序列化器进行二进制编码。其中一些序列化程序基于 Avro 和 Kryo 等外部库。每当 Flink 的序列化器(或使用的库)的内部实现发生变化时,编码可能会发生变化。此外,输出格式在固定块边界对齐数据,并在记录跨越边界时使用填充。
因此,TypeSerializerOutputFormat
的输出不打算被其他工具或阅读器使用。我会实施自定义 OutputFormat
。
我使用 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)
如何删除二进制文件末尾的元信息? (貌似条目数)
为什么里面有一些错误的数据?我可以删除它们吗?可以看下图两者的区别(两个(127, -1 , -1)和一个NULL)
我是不是漏掉了什么?
Flink 的 TypeSerializerOutputFormat
旨在与 TypeSerializerInputFormat
协同工作并允许并行文件扫描。 Flink 使用它的内部序列化器进行二进制编码。其中一些序列化程序基于 Avro 和 Kryo 等外部库。每当 Flink 的序列化器(或使用的库)的内部实现发生变化时,编码可能会发生变化。此外,输出格式在固定块边界对齐数据,并在记录跨越边界时使用填充。
因此,TypeSerializerOutputFormat
的输出不打算被其他工具或阅读器使用。我会实施自定义 OutputFormat
。