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
网友评论