美文网首页Spark学习笔记
2.Spark学习(Python版本):第一个spark应用程序

2.Spark学习(Python版本):第一个spark应用程序

作者: 马淑 | 来源:发表于2018-08-11 11:05 被阅读71次
    step1. 在/usr/local/spark下创建python_code文件夹,把python程序代码和文件资源放在这里。

    mkdir <fname> - 创建文件夹 ; rm -rf <fname> - 删除文件夹

    mashu@mashu-Inspiron-5458:~$ cd /usr/local/spark
    mashu@mashu-Inspiron-5458:/usr/local/spark$ mkdir python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark$ cd python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ 
    
    step2.用vim写一些文字到word.txt

    esc-退出编辑模式 ; :wq - 保存退出

    mashu@mashu-Inspiron-5458:~$ cd /usr/local/spark
    mashu@mashu-Inspiron-5458:/usr/local/spark$ mkdir python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark$ cd python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ vim word.txt
    
    step3.在/usr/local/spark启动Spark

    cd .. - 回到上级目录:

    mashu@mashu-Inspiron-5458:~$ cd /usr/local/spark
    mashu@mashu-Inspiron-5458:/usr/local/spark$ mkdir python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark$ cd python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ vim word.txt
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ cd ..
    mashu@mashu-Inspiron-5458:/usr/local/spark$ ./bin/pyspark
    
    step4.开启另一个终端,启动Hadoop中的HDFS组件

    Ctrl+Alt+T - 开启新的终端 ; ./sbin/start-dfs.sh - 启动HDFS

    mashu@mashu-Inspiron-5458:~$ cd /usr/local/hadoop
    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./sbin/start-dfs.sh
    
    step5. HDFS用户根目录创建(如已创建可省略此步)

    如果你在HDFS文件系统中,还没有为当前Linux登录用户创建目录(我使用自己的名字mashu登录Linux系统),请使用下面命令创建:
    ./bin/hdfs dfs -mkdir -p /user/mashu (注意:是user,不是usr)

    创建好以后,下面我们使用命令查看一下HDFS文件系统中的目录和文件,下面两条命令是等价的:
    ./bin/hdfs dfs -ls .
    ./bin/hdfs dfs -ls /user/mashu

    step5.本地上传HDFS文件

    ./bin/hdfs dfs -rm -skipTrash <fname> - 删除文件

    我在之前的实验中,已经创建了一个word.txt,可以先删除。

    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./bin/hdfs dfs -rm -skipTrash ./word.txt
    

    现在把前面step2中创建的word.txt上传到HDFS用户根目录,再看用户根目录下确实多了一个word.txt文件。

    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./bin/hdfs dfs -put /usr/local/spark/python_code/word.txt
    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./bin/hdfs dfs -ls .
    Found 1 items
    -rw-r--r--   1 mashu supergroup         43 2018-08-11 12:31 word.txt
    

    使用cat命令查看一个HDFS中的word.txt文件的内容,命令如下:

    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./bin/hdfs dfs -cat word.txt
    Spark is faster than Hadoop
    I love Spark
    
    step6.命令行中执行词频统计

    切换到pyspark窗口,采用sc.textFile()方法来从文件系统中加载数据创建RDD:

    Using Python version 3.5.2 (default, Nov 23 2017 16:37:01)
    SparkSession available as 'spark'.
    >>> textFile = sc.textFile('word.txt')
    >>> textFile.first()
    'Spark is faster than Hadoop'                                                  
    >>> 
    

    遍历textFile的每一行内容,分离每个单词,再用textFile.flatMap()把多个单词列表“拍平”成一个长列表。再把这个长列表转化成(<word>,1)形式的键值对,以键<word>对值进行累加。wordCount.collect()显示这个RDD 的内容。

    >>> textFile = sc.textFile('word.txt')
    >>> wordCount = textFile.flatMap(lambda line:line.split(' ')).map(lambda word:(word,1)).reduceByKey(lambda a,b:a+b)
    >>> wordCount.collect()
    [('love', 1), ('than', 1), ('Spark', 2), ('is', 1), ('Hadoop', 1), ('I', 1), ('faster', 1)]
    
    step7.编写独立应用程序执行词频统计

    /usr/local/spark/python_code/目录下新建一个wordcount.py文件,里面包含如下代码:

    from pyspark import SparkContext
    sc = SparkContext('local','wordcount')
    textFile = sc.textFile('word.txt')
    wordCount = textFile.flatMap(lambda line: line.split(' ')).map(lambda word:(word,1)).reduceByKey(lambda a,b:a+b)
    wordCount.foreach(print)
    

    控制台中的命令如下:

    mashu@mashu-Inspiron-5458:~$ cd /usr/local/spark/python_code
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ vim wordcount.py
    mashu@mashu-Inspiron-5458:/usr/local/spark/python_code$ python ./wordcount.py
    

    输出结果为:


    step8.结束HDFS

    ./sbin/start-dfs.sh - 开始HDFS组件
    ./sbin/stop-dfs.sh - 结束HDFS组件

    mashu@mashu-Inspiron-5458:/usr/local/hadoop$ ./sbin/stop-dfs.sh
    Stopping namenodes on [localhost]
    localhost: stopping namenode
    localhost: stopping datanode
    Stopping secondary namenodes [0.0.0.0]
    0.0.0.0: stopping secondarynamenode
    

    相关文章

      网友评论

        本文标题:2.Spark学习(Python版本):第一个spark应用程序

        本文链接:https://www.haomeiwen.com/subject/dqzrbftx.html