【发布时间】:2017-06-01 08:21:56
【问题描述】:
我有一个 PCollection 持有 KV 并且只有一个键值,键没有意义,值持有 KV 的 Iterable。这个内部 KV 的 key 是一个数字,这个 KV 的 value 是一个字符串的 Iterable。 PCollection 的定义如下:
PCollection<KV<String, Iterable<KV<Long, Iterable<String>>>>>
我想在一台机器上写入文件:按数字排序,对于每个数字和该数字中的每个字符串,文件中的一行。
使用这个 PCollection 我可以有一个 ParDo,它在它的 processElement 方法中接收所有数字及其字符串。 现在我可以按数字排序,迭代数字,为每个数字迭代字符串并将字符串和数字输出到输出集合。
但是,当我将此集合写入这样的文件时:
outputCollection.apply(TextIO.Write.withoutSharding().to(options.getOutputFilePath()));
字符串不是按数字排序写入的,看起来写入是并行完成的,即使它是在单台机器上本地完成的。 尽管我将“数字:字符串”插入到按数字排序的输出集合中,但在文件中我看到数字混淆了。
如何控制 TextIO.Write 写入记录的顺序?我可以告诉它在单线程中运行并使用元素插入 PCollection 的顺序吗?
谢谢
【问题讨论】:
-
另见此处(阅读,但同样的问题)-> stackoverflow.com/questions/42027780/…