美文网首页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