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

24 | PCollection:为什么Beam要如此抽象封装数据?

有向无环图的自动优化执行计划
生成有向无环图(DAG)
延迟执行的模式
无法修改PCollection所承载的数据
影响Beam的数据处理方式
有界PCollection和无界PCollection
统一表达有界数据和无界数据
无法确定执行顺序
保证最大的处理输出
与分布式本质相关
在网络上传输的序列化和逆序列化
作用与Beam的本质紧密相关
为PCollection的元素编写Coder
适用于大规模数据处理场景
用于隐藏数据的实现细节
可并行计算的数据集
不可变性
没有固定大小
无序性
Coders
PCollection的应用
PCollection的设计思想
为什么Beam用PCollection抽象封装数据?

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

你好,我是蔡元楠。
今天我要与你分享的主题是“为什么 Beam 要如此抽象封装数据”。
很多人在刚开始接触 Apache Beam 的时候,都会觉得这里面的概念太抽象了。什么 PCollection、PValue、Transform……这都是些什么?尤其是 PCollection,完全和先前的技术知识找不到对应。
确实如此。同样作为数据的容器,PCollection 却并不像 Python/Java 的 List 或者 C++ 的 vector。PCollection 是无序的,Beam 对于 PCollection 中元素的处理顺序不作任何保证。所以,你不可能说“我想处理 PCollection 中的第二个元素”,因为它就没有“第几个”这种概念。
PCollection 也不像 Python/Java 的 Set,或者 C++ 的 unordered_set,PCollection 不一定有固定的边界。所以,你也不能指望去查找一个 PCollection 的大小。在 PCollection 的世界里,也没有“固定大小”这样的概念。
作为程序员,我很讨厌重复造轮子,尤其是新瓶装旧酒。的确,有很多开发者为了体现自己项目的复杂度,故意强行引进了很多概念,让大家都似懂非懂的。这就像是为了体现自己知道茴香豆的“茴”有几种写法一样,故意用另一种写法来体现自己“有文化”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Apache Beam的核心数据结构PCollection的设计思想体现了其分布式计算系统的特点,为开发者提供了更好的开发体验。PCollection是可并行计算的数据集,与其他技术系统的数据结构相比,Beam的数据结构体系更为单调,几乎所有数据都能表达为PCollection。PCollection的创建取决于需求,可以来自代码生成的伪造数据或者从文件中读取。此外,PCollection需要Coders来告知Beam如何序列化和逆序列化数据类型以便在网络上传输。PCollection是无序的,这与其分布式本质有关,而其无界特性取决于数据是如何产生的。PCollection的不可变性使得修改其所承载数据的唯一方式是通过转化,这种延迟执行的模式使得Beam能够自动优化执行计划。文章还提出了思考题,邀请读者讨论PCollection的设计是否能表达大规模数据处理场景。整体而言,本文深入介绍了PCollection的设计特点和优势,为读者提供了对Beam核心数据结构的全面了解。

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

全部留言(5)

  • 最新
  • 精选
  • 人唯优
    Beam的register机制是否和spark里面的kryo register是一样的概念?Beam为何不提前为基本类型注册好coder或者使用默认的java序列化反序列化机制?就像spark里面的java和kryo.register一样。这样读取基本的常见数据源比如mysql的表就不用单独注册了吧,不然不是有很多重复工作?

    作者回复: 的确是相似的注册概念,底层实现也是相似的设计思路。beam也有提前注册好的coder啊,对于基本数据类型。

    2019-06-17
    8
  • 张凯江
    感觉跟rdd差不多。 一个天生设计成有界 一个天生设计成无界
    2019-06-18
    6
  • 张凯江
    参数是匿名内部类,而不是简单的操作。 匿名内部类可以应用外层或其它pc吧
    2019-06-23
  • 胡墨
    请问后半部分的例子是否可以有Python实现呢?生物背景对Java一窍不通...
    2019-06-19
  • cricket1981
    请问PCollection和RDD的相同点和不同点都有哪些呢?
    2019-06-17
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部