24 | PCollection:为什么Beam要如此抽象封装数据?
蔡元楠
该思维导图由 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
《大规模数据处理实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 人唯优Beam的register机制是否和spark里面的kryo register是一样的概念?Beam为何不提前为基本类型注册好coder或者使用默认的java序列化反序列化机制?就像spark里面的java和kryo.register一样。这样读取基本的常见数据源比如mysql的表就不用单独注册了吧,不然不是有很多重复工作?
作者回复: 的确是相似的注册概念,底层实现也是相似的设计思路。beam也有提前注册好的coder啊,对于基本数据类型。
2019-06-178 - 张凯江感觉跟rdd差不多。 一个天生设计成有界 一个天生设计成无界2019-06-186
- 张凯江参数是匿名内部类,而不是简单的操作。 匿名内部类可以应用外层或其它pc吧2019-06-23
- 胡墨请问后半部分的例子是否可以有Python实现呢?生物背景对Java一窍不通...2019-06-19
- cricket1981请问PCollection和RDD的相同点和不同点都有哪些呢?2019-06-17
收起评论