在Google Cloud Dataflow中使用带有复杂PCollection类型的TextIO.Write

时间:2015-03-18 20:16:54

标签: java google-cloud-dataflow

我的PCollection看起来像这样:

PCollection<KV<KV<String, EventSession>, Long>> windowed_counts

我的目标是将其作为文本文件写出来。我想用 类似的东西:

windowed_counts.apply( TextIO.Write.to( "output" ));

但我很难正确设置Coders。这是我认为可行的:

    KvCoder kvcoder = KvCoder.of(KvCoder.of(StringUtf8Coder.of(), AvroDeterministicCoder.of(EventSession.class) ), TextualLongCoder.of());
    TextIO.Write.Bound io = TextIO.Write.withCoder( kvcoder );
    windowed_counts.apply( io.to( "output" ));

其中TextualLongCoder是我自己的AtomicCoder的子类,类似于TextualIntegerCoder。 EventSession类注释为使用AvroDeterministicCoder作为其默认编码器。

但是有了这个,我得到了包含非文本字符等的乱码输出。有人可以建议你如何将这个特定的PCollection写成文本吗?我确定这里有一些显而易见的东西......

1 个答案:

答案 0 :(得分:4)

您是否尝试创建一个转换,将PCollection KV<KV<String, EventSession>, Long>转换为PCollection String,然后将其写入文本文件?

我认为这是满足我需求的最灵活方式