beam transform

和rdd不同,beam的transform可能是多个输入,多个输出,所有transform是节点,PCollection是边
在这里插入图片描述

Beam 中的 PCollection 有一个抽象的成员函数Apply。使用任何一个 Transform 时候,你都需要调用这个 apply 方法。

pcollection1 = pcollection2.apply(Transform)

final_collection = input_collection.apply(Transform1)
.apply(Transform2)
.apply(Transform3)

常见transform接口:ParDo、GroupByKey。
ParDo 就是 Parallel Do 的意思,通用的并行处理数据操作。
在编写 ParDo 时,你的输入是一个 PCollection 中的单个元素,输出可以是 0 个、1 个,或者是多个元素。作用:过滤一个数据集、格式转化一个数据集、提取一个数据集的特定值

无状态的操作:

static class UpperCaseFn extends DoFn<String, String> {
  @ProcessElement
  public void processElement(@Element String word, OutputReceiver<String> out) {
    out.output(word.toUpperCase());
  }
}

PCollection<String> upperCaseWords = words.apply(
    ParDo
    .of(new UpperCaseFn())); 


pcollection.apply(ParDo.of(new DoFn()))

有状态的操作:比如要根据数据库中的数据操作数据

Stateful Transform 和 side input/side output

PCollectionView<Integer> mediumSpending = ...;

PCollection<String> usersBelowMediumSpending =
  userIds.apply(ParDo
      .of(new DoFn<String, String>() {
          @ProcessElement
          public void processElement(@Element String userId, OutputReceiver<String> out, ProcessContext c) {
            int medium = c.sideInput(mediumSpending);
            if (findSpending(userId) <= medium) {
              out.output(userId);
            }
          }
      }).withSideInputs(mediumSpending)
  );


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值