1. 程式人生 > >python中使用jieba分詞庫編寫spark中文版WordCount

python中使用jieba分詞庫編寫spark中文版WordCount

編寫使用的IDE是pycharm

進入WordCount.py檔案寫入如下程式碼,就是中文版WordCount,很經典的分散式程式,需要用到中文分詞庫jieba,去除停用詞再進行計數

from pyspark.context import SparkContext
import jieba
# from pyspark.sql.session import SparkSession
# from pyspark.ml import Pipeline
# from pyspark.ml.feature import StringIndexer, VectorIndexer
sc = SparkContext("local", "WordCount")   #初始化配置
data = sc.textFile(r"D:\WordCount.txt")   #讀取是utf-8編碼的檔案
with open(r'd:\中文停用詞庫.txt','r',encoding='utf-8') as f:
    x=f.readlines()
stop=[i.replace('\n','') for i in x]
stop.extend([',','的','我','他','','。',' ','\n','?',';',':','-','(',')','!','1909','1920','325','B612','II','III','IV','V','VI','—','‘','’','“','”','…','、'])#停用標點之類
data=data.flatMap(lambda line: jieba.cut(line,cut_all=False)).filter(lambda w: w not in stop).\
    map(lambda w:(w,1)).reduceByKey(lambda w0,w1:w0+w1).sortBy(lambda x:x[1],ascending=False)
print(data.take(100))

輸出結果為:

C:\Anaconda3.5.2.0\python.exe D:/Project/WordCount.py
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/D:/spark/jars/hadoop-auth-2.7.3.jar) to method sun.security.krb5.Config.getInstance()
WARNING: Please consider reporting this to the maintainers of org.apache.hadoop.security.authentication.util.KerberosUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2100-01-01 10:00:00 WARN  NativeCodeLoader:100 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2100-01-01 10:00:00 WARN  Utils:66 - Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
[Stage 0:>                                                          (0 + 1) / 1]Building prefix dict from the default dictionary ...
Loading model from cache C:\Temp\jieba.cache
Loading model cost 0.9 seconds.
Prefix dict has been built succesfully.
[('小王子', 419), ('說', 360), ('沒有', 200), ('一個', 199), ('說道', 120), ('星星', 119), ('星球', 104), ('會', 98), ('回答', 91), ('地方', 80), ('國王', 78), ('畫', 74), ('狐狸', 72), ('知道', 68), ('中', 67), ('花', 64), ('羊', 62), ('一隻', 61), ('道', 57), ('非常', 56), ('看到', 53), ('命令', 52), ('有點', 50), ('這是', 48), ('不會', 48), ('朋友', 47), ('沙漠', 46), ('走', 46), ('地理學家', 46), ('.', 45), ('時', 43), ('想', 42), ('事', 42), ('感到', 42), ('行星', 42), ('問題', 41), ('可能', 40), ('真', 40), ('重要', 39), ('猴麵包樹', 38), ('&#', 38), ('39', 38), (';', 38), ('時間', 37), ('象', 36), ('問', 36), ('笑', 36), ('地球', 36), ('裡', 35), ('愛', 34), ('花兒', 34), ('這種', 32), ('喜歡', 32), ('做', 32), ('蛇', 32), ('馴服', 32), ('一點', 31), (':', 31), ('看著', 30), ('一種', 30), ('發現', 30), ('一定', 30), ('一顆', 30), ('\u3000', 30), ('你好', 30), ('點燈', 30), ('探察', 30), ('大人', 29), ('家', 29), ('東西', 28), ('看見', 28), ('好象', 28), ('這位', 28), ('提出', 28), ('問道', 28), ('應該', 28), ('吃', 28), ('一天', 28), ('請', 27), ('住', 27), ('起來', 27), ('現在', 27), ('奇怪', 26), ('從來', 26), ('已經', 26), ('明白', 26), ('朵花', 26), ('路燈', 26), ('尋找', 26), ('十分', 24), ('小傢伙', 24), ('是從', 24), ('地說', 24), ('年', 24), ('自言自語', 24), ('虛榮', 24), ('生活', 22), ('嚴肅', 22), ('工作', 22), ('想要', 22)]

Process finished with exit code 0

最終結果是:

[('小王子', 419), ('說', 360), ('沒有', 200),('一個', 199), ('說道', 120), ('星星', 119), ('星球', 104), ('會', 98), ('回答', 91), ('地方', 80), ('國王', 78), ('畫', 74), ('狐狸', 72), ('知道', 68), ('中', 67), ('花', 64), ('羊', 62), ('一隻', 61), ('道', 57), ('非常', 56), ('看到', 53), ('命令', 52), ('有點', 50), ('這是', 48), ('不會', 48), ('朋友', 47), ('沙漠', 46), ('走', 46), ('地理學家', 46), ('.', 45), ('時', 43), ('想', 42), ('事', 42), ('感到', 42), ('行星', 42), ('問題', 41), ('可能', 40), ('真', 40), ('重要', 39), ('猴麵包樹', 38), ('&#', 38), ('39', 38), (';', 38), ('時間', 37), ('象', 36), ('問', 36), ('笑', 36), ('地球', 36), ('裡', 35), ('愛', 34), ('花兒', 34), ('這種', 32), ('喜歡', 32), ('做', 32), ('蛇', 32), ('馴服', 32), ('一點', 31), (':', 31), ('看著', 30), ('一種', 30), ('發現', 30), ('一定', 30), ('一顆', 30), ('\u3000', 30), ('你好', 30), ('點燈', 30), ('探察', 30), ('大人', 29), ('家', 29), ('東西', 28), ('看見', 28), ('好象', 28), ('這位', 28), ('提出', 28), ('問道', 28), ('應該', 28), ('吃', 28), ('一天', 28), ('請', 27), ('住', 27), ('起來', 27), ('現在', 27), ('奇怪', 26), ('從來', 26), ('已經', 26), ('明白', 26), ('朵花', 26), ('路燈', 26), ('尋找', 26), ('十分', 24), ('小傢伙', 24), ('是從', 24), ('地說', 24), ('年', 24), ('自言自語', 24), ('虛榮', 24), ('生活', 22), ('嚴肅', 22), ('工作', 22), ('想要', 22)]