Google DataFlow Apache Beam

时间:2018-02-10 01:13:46

标签: google-cloud-dataflow apache-beam google-cloud-spanner

我正在尝试使用Apache Beam创建一个Dataflow管道,但我无法按照文档进行操作,也无法找到任何示例。

管道很简单。

  1. 创建管道
  2. 阅读pub / sub主题
  3. 写入扳手。
  4. 目前,我陷入了第2步。我找不到任何关于如何从pub / sub读取并使用它的示例。

    这是我到目前为止的代码,并希望

    class ExtractFlowInfoFn extends DoFn<PubsubMessage, KV<String, String>> {
        public void processElement(ProcessContext c) {
            KV.of("key", "value");
        }
    }
    
    public static void main(String[] args) {
    
        Pipeline p = Pipeline.create(
        PipelineOptionsFactory.fromArgs(args).withValidation().create());
    
        p.apply("ReadFromPubSub", PubsubIO.readMessages().fromSubscription("test"))
         .apply("ConvertToKeyValuePair", ParDo.of(new ExtractFlowInfoFn()))
         .apply("WriteToLog", ));
    };
    

    我能够通过以下几个例子来提出代码。说实话,我不知道我在这做什么。

    请帮助我理解这一点或将我链接到正确的文档。

1 个答案:

答案 0 :(得分:6)

从Pub / Sub中提取消息并写入Cloud Spanner的示例:

import com.google.cloud.spanner.Mutation;
import org.apache.beam.sdk.io.gcp.spanner.SpannerIO;
import org.apache.beam.sdk.transforms.DoFn.ProcessElement;

class MessageToMutationDoFn extends DoFn<PubsubMessage, Mutation> {

    @ProcessElement
    public void processElement(ProcessContext c) {

        // TODO: create Mutation object from PubsubMessage

        Mutation mutation = Mutation.newInsertBuilder("users_backup2")
            .set("column_1").to("value_1")
            .set("column_2").to("value_2")
            .set("column_3").to("value_3")
            .build();

        c.output(mutation);
    }
}

public static void main(String[] args) {

    Pipeline p = Pipeline.create();

    p.apply("ReadFromPubSub", PubsubIO.readMessages().fromSubscription("test"))
     .apply("MessageToMutation", ParDo.of(new MessageToMutationDoFn()))
     .apply("WriteToSpanner", SpannerIO.write()
         .withProjectId("projectId")
         .withInstanceId("spannerInstanceId")
         .withDatabaseId("spannerDatabaseId"));

    p.run();
}

参考:Apache Beam SpannerIOApache Beam PubsubIO