大规模数据处理实战
蔡元楠
硅谷资深工程师
41608 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
大规模数据处理实战
15
15
1.0x
00:00/00:00
登录|注册

25 | Transform:Beam数据转换操作的抽象方法

side input/side output
GroupByKey
ParDo
优化
Stateful Transform
常见Transform
apply()方法
节点
有向图
思考题
Transform
PCollection
Beam数据转换操作的抽象方法

该思维导图由 AI 生成,仅供参考

你好,我是蔡元楠。
今天我要与你分享的主题是“Beam 数据转换操作的抽象方法”。
在上一讲中,我们一起学习了 Beam 中数据的抽象表达——PCollection。但是仅仅有数据的表达肯定是无法构建一个数据处理框架的。那么今天,我们就来看看 Beam 中数据处理的最基本单元——Transform。
下图就是单个 Transform 的图示。
之前我们已经讲过,Beam 把数据转换抽象成了有向图。PCollection 是有向图中的边,而 Transform 是有向图里的节点。
不少人在理解 PCollection 的时候都觉得这不那么符合他们的直觉。许多人都会自然地觉得 PCollection 才应该是节点,而 Transform 是边。因为数据给人的感觉是一个实体,应该用一个方框表达;而边是有方向的,更像是一种转换操作。事实上,这种想法很容易让人走入误区。
其实,区分节点和边的关键是看一个 Transform 是不是会有一个多余的输入和输出
每个 Transform 都可能有大于一个的输入 PCollection,它也可能输出大于一个的输出 PCollection。所以,我们只能把 Transform 放在节点的位置。因为一个节点可以连接多条边,而同一条边却只能有头和尾两端。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Beam数据转换操作的抽象方法通过Transform将数据转换成有向图中的节点,而PCollection则是有向图中的边。Transform的基本使用方法是通过apply()函数调用,常见的Transform接口包括ParDo和GroupByKey。ParDo是一种通用的并行处理数据操作,而GroupByKey则是按Key归并数据集。Stateful Transform和side input/side output是必用的技术点,可以实现有状态的数据处理。Transform的优化是通过lazy execution实现的,可以让Beam的优化器合并操作。文章内容涵盖了Beam数据转换操作的基本概念和常见应用场景,适合读者快速了解Beam数据处理框架的特点和使用方法。 文章中介绍了Transform的概念和基本的使用方法,通过简单的例子让读者了解如何编写Transform的编程模型DoFn类。有状态DoFn在实际应用中尤其常见,读者可以多加关注。此外,文章还提出了一个思考题,探讨了Beam的ParDo与Spark的map()或者MapReduce的map之间的相似之处和不一样之处,引发读者思考和讨论。 总的来说,这篇文章通过简洁明了的语言和实际例子,帮助读者快速了解了Beam数据处理框架的特点和使用方法,同时引发了读者的思考和讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 常超
    1.ParDo支持数据输出到多个PCollection,而Spark和MapReduce的map可以说是单线的。 2.ParDo提供内建的状态存储机制,而Spark和MapReduce没有(Spark Streaming有mapWithState )。

    作者回复: 不错的总结!

    2019-06-19
    2
    17
  • cricket1981
    ParDo能指定并行度吗?

    作者回复: 谢谢你的提问!ParDo的level好像是不行的,如果对于整个数据流水线来说的话,可以指定numWorkers。

    2019-06-19
    2
  • LJK
    ParDo是不是跟map一个意思?

    作者回复: 不是。map是一个input一个output,map是一个input可以有0个或者多个output

    2019-08-22
    1
  • 柳年思水
    ParDo 有点自定义 UDX 的意思,而 Spark 或 Flink 除了支持 UDX,还内置很多常用的算子

    作者回复: 谢谢你的留言!其实Beam也有非常多内置的常用Transform。

    2019-07-20
  • sxpujs
    Spark的算子和函数非常方便和灵活,这种通用的DoFn反而很别扭。
    2019-06-20
    9
  • vigo
    推荐python,然而这章又几乎全是java事例
    2019-10-11
    8
  • 微思
    Statefullness、side input/side output相关的例子可以再多一点。
    2019-06-19
    2
  • 老莫mac
    刚开始接触并行处理架构,之前看了FLINK,后来公司选型用SPARK,走回学习SPARK的路。看了SPARK 的BEAM,我只有一个感觉,和FLINK的理念何其相像,每个处理步骤或者概念FLINK都有对应的实现。BEAM要在FLINK上面加一层,会损失效率。所以我能想象到的好处只有一个,就是BEAM能同时在FLINK和SPARK上运行,汇聚两边的结果。为了将两种不同的架构当成一种来使用,把处理目标PCOLLECTION 当成流,当成KAFKA往两边分发,两边时独立的消息处理,把结果返回,在某个地方REDUCE 或者SHUFFLE,得到结果。感觉本质上就是这样。
    2020-06-03
    1
  • Junjie.M
    老师,当一个transform有多个输入pcollection时如何调用transform,是合并pcollection后调用还是各自调用。还有一个transform如何输出多个pcollection。可以给个代码示例吗
    2020-04-12
    1
  • 阿里斯托芬
    ParDo应该可以理解为是一个flatmap操作,不过是一个操作更加丰富的flatmap
    2022-05-17
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部