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

时间:2016-02-07 04:36:30

标签: apache-flink

我使用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)

  3. enter image description here enter image description here

    我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:3)

Flink的TypeSerializerOutputFormat旨在与TypeSerializerInputFormat一起使用,并允许进行并行化文件扫描。 Flink使用它的内部序列化器进行二进制编码。其中一些序列化程序基于外部库,如Avro和Kryo​​。只要Flink的序列化程序(或使用的库)的内部实现发生更改,编码可能会发生变化。此外,输出格式在固定块边界处对齐数据,并且如果记录跨越边界则使用填充。

因此,TypeSerializerOutputFormat的输出并不意味着被其他工具或读者使用。我会实现自定义OutputFormat