请编写代码,针对words.txt文本(此文本已经存储在HDFS的/pydata/input/文件夹下)进行词频计算。
- 要求1,将词频统计的结果存储在HDFS的/pydata/output5/路径下
words.txt
hello world hello hadoop
hadoop hello world hive
hive hive hadoop
hadoop hadoop hive
hive hadoop hello hello
sqoop hive hadoop hello hello
hello world hello hadoop
hadoop hello world hive
hive hive hadoop
-
要求2,统计词频前三的单词,统计词频最高的单词,统计词频最低的单词,呈现结果如下。
前三:[('hadoop', 10), ('hello', 10), ('hive', 9)]
最高:('hadoop', 10)
最低:('world', 4)
import os
from pyspark import SparkContext, SparkConf
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DIRVER_PYTHON'] = '/root/anaconda3/bin/python3'
if __name__ == '__main__':
conf = SparkConf().setAppName('wordcount').setMaster('local[*]')
sc = SparkContext(conf=conf)
rdd_init = sc.textFile('file:///export/data/workspace/pyspark_parent/practice/data/words.txt')
# print(rdd_init.collect())
rdd_split = rdd_init.flatMap(lambda line:line.split())
rdd_word = rdd_split.map(lambda word: (word,1))
rdd_res = rdd_word.reduceByKey(lambda agg,curr: agg+curr)
rdd_res.saveAsTextFile('hdfs://node1:8020/pydata/output5/')
rdd_sort = rdd_res.sortBy(lambda line:line[1], ascending=False)
psorted_list = rdd_sort.collect()
# 前三
print(psorted_list[:3])
# # 最大
print(psorted_list[0])
# # 最小
print(psorted_list[-1])