数据流作业中同一类的不同编码器

时间:2015-01-05 22:55:35

标签: google-cloud-dataflow

我正在尝试在两个不同的场景中为同一个班级使用不同的编码器:

  1. 使用data = TextIO.Read.from(options.getInput()).withCoder(new Coder1())
  2. 从JSON输入文件中读取
  3. 在工作的其他地方,我希望使用SerializableCoder
  4. 使用data.setCoder(SerializableCoder.of(MyClass.class)来保持课程

    它在本地工作,但在使用

    在云中运行时失败
     Caused by: java.io.StreamCorruptedException: invalid stream header: 7B227365.
    

    是支持的方案吗?首先这样做的原因是为了避免读/写JSON格式,另一方面使输入文件的读取更有效(UTF-8解析是JSON读取器的一部分,因此它可以直接从InputStream读取)

    澄清: Coder1是我的编码员。

    另一个编码器是SerializableCoder.of(MyClass.class)

    系统如何选择使用哪个编码器?这两种格式是二进制不兼容的,看起来由于某些优化,第二个编码器用于数据格式,只能由第一个编码器读取。

1 个答案:

答案 0 :(得分:1)

是的,使用两个不同的编码器应该可以工作。 (需要注意的是,如果系统选择保留'数据'而不是将其优化为环绕计算,则只会使用#2中的编码器。)

您使用自己的编码器还是Dataflow SDK提供的编码器? TextIO上的快速警告 - 因为它使用换行符来编码元素边界,如果使用编码器生成包含可能被误认为换行符的编码值,则会遇到麻烦。你真的应该只在TextIO中使用文本编码。我们希望将来更清楚。