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

31 | WordCount Beam Pipeline实战

WordCountOptions
CountWords
ExtractWordsFn
参数化PipelineOptions
创建PTransform合并相关联的Transform
编写独立的DoFn
waitUntilFinish()方法
run()方法
TextIO.Write
Count Transform
分词和词频统计操作
TextIO.Read
创建Pipeline
PipelineOptions
思考题
DoFn和PTransform的单元测试
改进代码的建议
运行Pipeline
应用Transform
创建Pipeline
Pipeline技术
基本数据转换操作Transform
Beam基础数据结构PCollection
WordCount Beam Pipeline实战

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

你好,我是蔡元楠。
今天我要与你分享的主题是“WordCount Beam Pipeline 实战”。
前面我们已经学习了 Beam 的基础数据结构 PCollection,基本数据转换操作 Transform,还有 Pipeline 等技术。你一定跃跃欲试,想要在实际项目中使用了。这一讲我们就一起学习一下怎样用 Beam 解决数据处理领域的教科书级案例——WordCount。
WordCount 你一定不陌生,在第 18 讲中,我们就已经接触过了。WordCount 问题是起源于 MapReduce 时代就广泛使用的案例。顾名思义,WordCount 想要解决的问题是统计一个文本库中的词频。
比如,你可以用 WordCount 找出莎士比亚最喜欢使用的单词,那么你的输入是莎士比亚全集,输出就是每个单词出现的次数。举个例子,比如这一段:
HAMLET
ACT I
SCENE I Elsinore. A platform before the castle.
[FRANCISCO at his post. Enter to him BERNARDO]
BERNARDO Who's there?
FRANCISCO Nay, answer me: stand, and unfold yourself.
BERNARDO Long live the king!
FRANCISCO Bernardo?
BERNARDO He.
FRANCISCO You come most carefully upon your hour.
BERNARDO 'Tis now struck twelve; get thee to bed, Francisco.
FRANCISCO For this relief much thanks: 'tis bitter cold,
And I am sick at heart.
BERNARDO Have you had quiet guard?
FRANCISCO Not a mouse stirring.
BERNARDO Well, good night.
If you do meet Horatio and Marcellus,
The rivals of my watch, bid them make haste.
FRANCISCO I think I hear them. Stand, ho! Who's there?
在这个文本库中,我们用“the: 数字”表示 the 出现了几次,数字就是单词出现的次数。
The: 3
And: 3
Him: 1
...
那么我们怎样在 Beam 中处理这个问题呢?结合前面所学的知识,我们可以把 Pipeline 分为这样几步:
用 Pipeline IO 读取文本库(参考第 27 讲);
用 Transform 对文本进行分词和词频统计操作(参考第 25 讲);
用 Pipeline IO 输出结果(参考第 27 讲);
所有的步骤会被打包进一个 Beam Pipeline(参考第 26 讲)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何使用Apache Beam解决数据处理领域的经典案例WordCount。通过创建Pipeline、应用Transform和运行Pipeline的步骤,读者可以快速了解Beam技术特点和实际应用。文章还提出了改进代码的建议,包括编写独立的DoFn、创建PTransform合并相关联的Transform以及参数化PipelineOptions,以提高代码的可读性、复用性和测试性。通过示例代码展示了如何实现这些改进,使得最终的数据处理代码更加简洁和灵活。此外,文章还提供了关于如何测试Pipeline的建议,强调了封装数据处理操作成DoFn和PTransform的重要性。整体而言,本文通过实战案例详细介绍了Beam Pipeline的应用,对读者快速了解Beam技术特点和实际应用具有重要参考价值。

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

全部留言(8)

  • 最新
  • 精选
  • cricket1981
    如何用Apache Beam求word count TopK问题呢?

    作者回复: 谢谢你的提问!在Beam原生的Composite Transform中有一个叫Top Transform,只需要应用Top Transform然后传入一个自己实现的Comparator就好了。

    2019-07-12
    1
  • cricket1981
    如果要按word出现次数从大到小排序应该怎么写?

    作者回复: 谢谢你的提问!这个可以应用Beam中的Top Transform,实现一个Comparator Interface就可以了。

    2019-07-12
    1
  • 杰洛特
    前两章还在说不要使用任何 DoFnTester 进行测试,这边怎么又来写 DoFnTester 了?感觉这专栏像是很多人写了拼起来的,有很多前后矛盾的地方
    2019-11-14
    4
    6
  • cricket1981
    Beam的函数确实难用,不像spark和scala collection那样用起来直观. sc.textFile("file:///your-input.txt").flatMap(_.split("[^\\p{L}]+")).map((_,1)).reduceByKey(_+_).map(_.swap).sortByKey(false).map(_.swap).collect
    2019-07-12
    4
  • 李孟聊AI
    这还是比较重,spark求同样的需求几个函数就搞定了
    2019-07-08
    1
  • 之渊
    实例代码 https://gitee.com/oumin12345/daimademojihe/blob/e20d60b93113d2537f4bd2e7f38b23ac17d4c3c0/cloudx/bigdata/src/main/java/test/beam/WordCountBeam.java 从我这个新人角度来看。虽然代码可能看起来没有spark 那些那么简洁。但是编程思想就是全部都是transform 。而且都是 链式调用,apply(xx).apply(xx) 其实没有差到哪里去。 1. 上手难得大大减低。spark 太多算子了,什么并发算子,什么action类的啊,等等。概念太多了。而beam 帮我们自动优化了。就好像在写很传统的java 代码一样。而且也非常易于理解。 2. 如果要类比的话,就好像 Apache beam 就是mybatis , 而 spark ,flink 就是 hibernate了。
    2020-08-23
  • Hank_Yan
    还是spark方便一些。。。beam看了这么多节,只能感受到其出发点,问题抽象的独到之处,很难感受实际工作中会带来什么益处,文中例子不太容易领悟到这点。
    2020-07-11
  • jeeeeeennnny
    Sideinput 可以根据业务逻辑新增数据吗?
    2020-03-24
    1
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部