我正在尝试使用数据流将BigTable表数据转换为通用记录。转换完成后,我必须与bucket中的另一个数据集进行比较。 以下是我的伪代码,对于我使用过的管道
pipeline
.apply("Read from bigtable", BigTableIo.read)
.apply("Transform BigTable to Avro Genric Records ",
ParDo.of(new TransformAvro(out.toString())))
.apply("Compare to existing avro file ")
.apply("Write back the data to bigTable")
// Function code is below to convert genric record
public class BigTableToAvroFunction
extends DoFn<KV<ByteString, Iterable<Mutation>>, GenericRecord> {
@ProcessElement
public void processelement(ProcessContext context){
GenericRecord gen = null ;
ByteString key = context.element().getKey();
Iterable<Mutation> value = context.element().getValue();
KV<ByteString, Iterable<Mutation>> element = context.element();
}
我被困在这里。
答案 0 :(得分:1)
目前尚不清楚与存储桶中的现有数据进行比较意味着什么。这取决于您要如何进行比较,文件大小是多少,可能还取决于其他因素。输入与输出示例会有所帮助。
例如,如果您要执行的操作类似于“加入”操作,则可以尝试使用CoGroupByKey
(link to the doc)来加入两个PCollections
,其中一个来自BigTable,另一读Avros from GCS。
或者,如果文件具有合理的大小(适合内存),则可以将其建模为侧面输入(link to the doc)。
或者,最终,您始终可以始终使用原始GCS API来查询ParDo
中的数据并手动完成所有操作。