Google Cloud Dataflow:无法使用TextIO.Read解析proto

时间:2015-06-04 14:43:38

标签: google-cloud-dataflow

这是我的代码

Sub testGUID()
 Dim TypeLib as Object
 Set TypeLib = CreateObject("Scriptlet.TypeLib")
 Wscript.Echo TypeLib.GUID
End Sub

但失败并出现错误

PCollection<MyProto> pCollection = p.apply(TextIO.Read.from(
            "gs://my_bucket/*")
            .withCoder(Proto2Coder.of(MyProto.class)));

本地下载的文件解析得很好。

我也尝试使用StringUtf8Coder和ByteArrayCoder做同样的事情,但没有骰子。

任何帮助?我不应该使用TextIO吗?我还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

TextIO将文件拆分为行并将编码器应用于每一行。当然,这不适用于非基于行的格式。我想你的文件每个包含一个序列化的proto,对吗?在这种情况下,您有两个选择:

  • 通过继承generic documentation on creating sources and sinks创建您自己的Source和Reader类(请参阅FileBasedFormat)。
  • 将处理所有文件的行为视为ParDo - 创建包含要处理的文件名的内存中PCollection(使用Create.of())并通过ParDo管道,该ParDo采用文件名并将文件解析为protobuf的;然后管道到管道的其余部分。

第二个更容易,但如果你真的有很多文件,第一个会更好。