使用GCP Cloud DataFlow读取BigTable并转换为通用记录

时间:2019-01-07 20:10:59

标签: avro apache-beam bigtable

我正在尝试使用数据流将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(); 
 } 

我被困在这里。

1 个答案:

答案 0 :(得分:1)

目前尚不清楚与存储桶中的现有数据进行比较意味着什么。这取决于您要如何进行比较,文件大小是多少,可能还取决于其他因素。输入与输出示例会有所帮助。

例如,如果您要执行的操作类似于“加入”操作,则可以尝试使用CoGroupByKeylink to the doc)来加入两个PCollections,其中一个来自BigTable,另一读Avros from GCS

或者,如果文件具有合理的大小(适合内存),则可以将其建模为侧面输入(link to the doc)。

或者,最终,您始终可以始终使用原始GCS API来查询ParDo中的数据并手动完成所有操作。