在我的apache beam管道中,我读取了太字节的日志事件。这些事件通常是在gcs桶中订购到分层时间桶。我使用textIO或avroIO readALL和readALLgenericRecords api将它们全部读入pcollection。
PCollection<KV<String, GenericRecord>> collection1 = p.apply(Create.of(files...))
.apply(AvroIO.readAllGenericRecords(schema)).apply(..extract request ID)
PCollection<KV<String, GenericRecord>> collection2 = p.apply(Create.of(files_2...))
.apply(AvroIO.readAllGenericRecords(schema)).apply(..extract request ID)
PCollection<KV<String, KV<GenericRecord, GenericRecord>>> joinedRecord =
KeyedPCollectionTuple.of(collection1).and(collection2)
.apply(CoGroupByKey.create());
接下来我尝试使用request_id将它们连接到另一个pcollection,这基本上是一个随机的uuid。由于apache beam和dataflow使用groupBy作为基元来进行连接,这确保了在连接基本上被洗牌之后生成的最终连接数据。这有保证吗? 如果我读取两个有限数据流的数据流并使用一些随机uuid连接它们,是否可以保证波束/数据流为连接的数据集产生足够好的混洗?