大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8443 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从这里开始,带你走上硅谷一线系统架构师之路
免费
模块一 | 直通硅谷大规模数据处理技术 (3讲)
01 | 为什么MapReduce会被硅谷一线公司淘汰?
02 | MapReduce后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
模块二 | 实战学习大规模数据处理基本功 (8讲)
04 | 分布式系统(上):学会用服务等级协议SLA来评估你的系统
05 | 分布式系统(下):架构师不得不知的三大指标
06 | 如何区分批处理还是流处理?
07 | Workflow设计模式:让你在大规模数据世界中君临天下
08 | 发布/订阅模式:流处理架构中的瑞士军刀
09 | CAP定理:三选二,架构师必须学会的取舍
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
11 | Kappa架构:利用Kafka锻造的屠龙刀
模块三 | 抽丝剥茧剖析Apache Spark设计精髓 (10讲)
12 | 我们为什么需要Spark?
13 | 弹性分布式数据集:Spark大厦的地基(上)
14 | 弹性分布式数据集:Spark大厦的地基(下)
15 | Spark SQL:Spark数据查询的利器
16 | Spark Streaming:Spark的实时流计算API
17 | Structured Streaming:如何用DataFrame API进行实时数据分析?
18 | Word Count:从零开始运行你的第一个Spark应用
19 | 综合案例实战:处理加州房屋信息,构建线性回归模型
20 | 流处理案例实战:分析纽约市出租车载客信息
21 | 深入对比Spark与Flink:帮你系统设计两开花
模块四 | Apache Beam为何能一统江湖 (8讲)
22 | Apache Beam的前世今生
23 | 站在Google的肩膀上学习Beam编程模型
24 | PCollection:为什么Beam要如此抽象封装数据?
25 | Transform:Beam数据转换操作的抽象方法
26 | Pipeline:Beam如何抽象多步骤的数据流水线?
27 | Pipeline I/O: Beam数据中转的设计模式
28 | 如何设计创建好一个Beam Pipeline?
29 | 如何测试Beam Pipeline?
模块五 | 决战 Apache Beam 真实硅谷案例 (7讲)
30 | Apache Beam实战冲刺:Beam如何run everywhere?
31 | WordCount Beam Pipeline实战
32 | Beam Window:打通流处理的任督二脉
33 | 横看成岭侧成峰:再战Streaming WordCount
34 | Amazon热销榜Beam Pipeline实战
35 | Facebook游戏实时流处理Beam Pipeline实战(上)
36 | Facebook游戏实时流处理Beam Pipeline实战(下)
模块六 | 大规模数据处理的挑战与未来 (4讲)
37 | 5G时代,如何处理超大规模物联网数据
38 | 大规模数据处理在深度学习中如何应用?
39 | 从SQL到Streaming SQL:突破静态数据查询的次元
40 | 大规模数据处理未来之路
专栏加餐 | 特别福利 (4讲)
FAQ第一期 | 学习大规模数据处理需要什么基础?
加油站 | Practice makes perfect!
FAQ第二期 | Spark案例实战答疑
FAQ第三期 | Apache Beam基础答疑
结束语 (1讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

18 | Word Count:从零开始运行你的第一个Spark应用

蔡元楠 2019-05-29
你好,我是蔡元楠。
今天我们来从零开始运行你的第一个 Spark 应用。
我们先来回顾一下模块三的学习路径。
首先,我们由浅入深地学习了 Spark 的基本数据结构 RDD,了解了它这样设计的原因,以及它所支持的 API。
之后,我们又学习了 Spark SQL 的 DataSet/DataFrame API,了解到它不仅提供类似于 SQL query 的接口,大大提高了开发者的工作效率,还集成了 Catalyst 优化器,可以提升程序的性能。
这些 API 应对的都是批处理的场景。
再之后,我们学习了 Spark 的流处理模块:Spark Streaming 和 Structured Streaming。两者都是基于微批处理(Micro batch processing)的思想,将流数据按时间间隔分割成小的数据块进行批处理,实时更新计算结果。
其中 Structured Streaming 也是使用 DataSet/DataFrame API,这套 API 在某种程度上统一了批处理和流处理,是当前 Spark 最流行的工具,我们必需要好好掌握。
虽然学习了这么多 API 以及它们的应用,但是大部分同学还没有从零开始写一个完整的 Spark 程序,可能更没有运行 Spark 程序的经历。纸上谈兵并不能帮助我们在工作生活中用 Spark 解决实际问题。所以,今天我就和你一起做个小练习,从在本地安装 Spark、配置环境开始,为你示范怎样一步步解决之前提到数次的统计词频(Word Count)的问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(21)

  • 看了这一讲意识到之前对Python欠缺了重视,现在明白Python在大数据处理领域是很有竞争力的,因为Spark和众多的库的原因,甚至超越Java,所以现在要重新重视起来Python的学习了
    2019-05-29
    5
  • 朱同学
    java万金油,什么都可以干,人好招,特别是我们这种偏远地区,scala,虽然开发效率高,但是人少,难招,所以我们大数据团队选择了java。至于运行效率,py是最慢的,java和scala应该半斤八俩吧
    2019-05-29
    5
  • hallo128
    【以下代码可以运行,但对df格式的操作是借助二楼的网址去找的,具体含义也不太清楚,只是可以运行出来】

    #python前运行调用包
    from pyspark.sql import SparkSession
    from pyspark.sql.functions import explode
    from pyspark.sql.functions import split

    #初始化SparkSession程序入口
    spark = SparkSession.builder.appName("WordCount").getOrCreate()
    #读入文档
    ds_lines = spark.read.text("/Users/apple/code_tool/spark/WordCount/demo.md")
    #针对df特定的计算格式
    words = ds_lines.select(
       explode(
           split(ds_lines.value, " ")
       ).alias("word")
    )
    #返回的RDD进行计数
    wordCounts = words.groupBy("word").count()
    #展示
    wordCounts.show()
    #关闭spark
    spark.stop()
    2019-06-08
    4
  • Michael
    spark_session = SparkSession.builder.appName("PySparkShell").getOrCreate()
    ds_lines = spark_session.read.textFile("README.md")
    ds = ds_lines.flatMap(lambda x: x.split(' ')).groupBy("Value").count()
    ds.show()

    我执行这段的时候报错了
    AttributeError: 'DataFrameReader' object has no attribute 'textFile'
    如果把textFile()改成text()就对了
    再执行flatMap那段,也报错了
    AttributeError: 'DataFrame' object has no attribute 'flatMap'
    是不是API变动了,我用的是2.4.3版本单机执行的
    2019-05-29
    1
    4
  • Yeon
    补充pyspark官方网站示例: https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html

    作者回复: 👍

    2019-08-06
    3
  • 科学Jia
    女同学看完2015年出的spark快速大数据分析这本书以后,再来看老师写的这些文字,觉得言简意赅,印象深刻,至于用什么语言倒无所谓了,主要是思路。后期希望老师能多说一些案例和处理中需要注意的技巧。
    2019-06-20
    3
  • Quincy
    Spark 不应该是首选Scala 么
    2019-06-13
    2
  • 青石
    #!/usr/bin/python3

    import os
    from pyspark import SparkContext, SparkConf


    os.environ['SPARK_HOME'] = '/usr/local/spark'
    os.environ['HADOOP_HOME'] = '/usr/local/hadoop-2.7.7'

    conf = SparkConf().setAppName('WordCount').setMaster('local')
    sc = SparkContext('local', 'pyspark', conf=conf)

    text_file = sc.textFile('file:///Users/albert.ming.xu/Downloads/text.txt')

    counts = text_file.filter(lambda x: len(x.strip()) > 0).flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y).sortBy(lambda x: x[1], ascending=False)

    print('|{0: ^20}|{1: ^20}|'.format('Word', 'Count'))
    for (word, num) in counts.take(10):
        print('|{0: ^20}|{1: ^20}|'.format(word, num))

    2019-05-31
    2
  • 这个名字居然都有
    老师,你给一个完整的案例吧,
    2019-05-29
    1
    2
  • 大志
    老师,本地已经安装了Spark,有Demo吗,只看代码片段的话还是无从下手啊
    2019-05-29
    1
    2
  • J Zhang
    用java写 有点冗长 我不敢苟同,因为java8 已经是函数编程了!而且spark开发我觉得大部分还是spark sql多点!这样基本没啥区别
    2019-05-29
    1
  • 斯盖丸
    .groupBy("Value")这个value是什么意思?

    作者回复: SparkSession.read.text()读取文件后生成的DataFrame只有一列,它的默认名字就是“value”。我们用lines.value去读取这一列,是同样的道理。之后我们给新的列重命名为”word”,所以groupBy的参数变成了”word”。

    2019-05-29
    1
  • Bing
    flatMap是rdd的算子,df不能直接用,可以explode行转列
    2019-05-29
    1
  • ttttt
    实践成功
    demo.txt:
    I hava a dog
    He has a Dog
    RDD写法:
    [('I', 1), ('hava', 1), ('a', 2), ('dog', 1), ('He', 1), ('has', 1), ('Dog', 1)]
    [('a', 2), ('I', 1), ('hava', 1), ('dog', 1), ('He', 1), ('has', 1), ('Dog', 1)]
    DF写法:
    [Row(word='dog', count=1), Row(word='He', count=1), Row(word='Dog', count=1), Row(word='I', count=1), Row(word='a', count=2), Row(word='hava', count=1), Row(word='has', count=1)]
    [Row(word='a', count=2), Row(word='I', count=1), Row(word='Dog', count=1), Row(word='hava', count=1), Row(word='dog', count=1), Row(word='has', count=1), Row(word='He', count=1)]

    从启动到出结果,DF写法速度要比rdd慢。

    作者回复: 👍🏻

    2019-09-02
  • ttttt
    python 直接安装
    pip install pyspark
    pip帮你搞定一切安装配置问题。
    参考资料:
    https://pypi.org/project/pyspark/

    作者回复: 嗯,这位同学说的很好,用pip install安装pyspark确实方便。我介绍的方法比较普遍试用。

    2019-09-01
    1
  • 西北偏北
    对于词频统计的场景,除了用map reduce的方式,对应到sql就是group by,基于每个单词分组然后统计每个分组的大小
    2019-08-01
  • Qi Liu 刘祺
    继续学习~

    作者回复: 加油⛽️

    2019-06-29
  • hallo128
    “虽然 Spark 还支持 Java 和 R,但是我个人不推荐你使用。用 Java 写程序实在有些冗长,而且速度上没有优势。”
    推荐使用,还是应该详细说明对比下,不能只因为自己偏好某种工具给出建议。对于spark原生来说,速度和库同步更新更快的是Scala,如果你想随时用到spark最新功能库的话,就应该选择Scala,同时速度也是最快的。
    至于Python,R,Java,一方面和你的熟悉程度有关,另一方面也与你到底准备用spark来做什么的目的有关。是集群控制,还是数据分析,还是建模,来选择合适的编程语言与spark进行连接编写。
    2019-06-08
  • hua168
    老师我想问一下,如果大数据学习用python、java、还是Scala?
    python虽然代码少,但不是说性能上,运行速度上不及java和go吗?
    2019-05-30
  • fresh
    能用java 写代码吗?
    2019-05-29
收起评论
21
返回
顶部