Spark运行WordCount例子(python)
一:前提
因为我们是在yarn上运行Spark,所以要有这个环境。文件是从hdfs上读取的,所以hadoop集群要搭建好(单机即可,不需要全分布式)。
下面演示是我在一台机器(master)上运行的。
另外代码用的是Python语言,在jupyter notebook上运行。
二:上传文件
1.查看本地文件:
2.把本地文件hello.txt上传到hdfs上。
命令:hadoop fs -put hello.txt /class_data
3.在yarn上运行Spark
命令:pyspark --master yarn
4.生成RDD文件
from pyspark import SparkConf,SparkContext
conf = SparkConf().setMaster("local").setAppName("My App")
sc = SparkContext(conf=conf) #生成SparkContext对象
rdd2 = sc.textFile("hdfs://master:9000/class_data/hello.txt") #从HDFS里加载RDD
rdd2
结果:
5.分割字符
rdd4 = rdd2.map(lambda x:x.split(" ")) #用split()函数分割字符
rdd4.collect() #map(func)函数作用:将每个元素传递到函数func中,并将结果返回为一个新的数据集
结果:
6.为每个字符标记
rdd6 = rdd2.flatMap(lambda x:x.split(" ")) #flatMap与map相似,但每个输入函数都可以映射到0或多个输出结果。
rdd7 = rdd6.map(lambda x:(x,1))
rdd7.collect()
结果:
7.统计记数
words = rdd7.reduceByKey(lambda a,b:a+b)
words.collect()
结果:
三、map和flatMap函数的区别
例:
rdd4 = rdd2.map(lambda x:x.split(" "))
rdd4.collect()
结果
rdd6 = rdd2.flatMap(lambda x:x.split(" "))
rdd6.collect()
结果
上面例子我们可以直观的看出来两者的区别。