我使用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)
答案 0 :(得分:3)
Flink的TypeSerializerOutputFormat
旨在与TypeSerializerInputFormat
一起使用,并允许进行并行化文件扫描。 Flink使用它的内部序列化器进行二进制编码。其中一些序列化程序基于外部库,如Avro和Kryo。只要Flink的序列化程序(或使用的库)的内部实现发生更改,编码可能会发生变化。此外,输出格式在固定块边界处对齐数据,并且如果记录跨越边界则使用填充。
因此,TypeSerializerOutputFormat
的输出并不意味着被其他工具或读者使用。我会实现自定义OutputFormat
。