2016-04-14 56 views
0

我想閱讀一個相當大的文檔,並從中提取N-gram(N個單詞的連續序列)。我也想按頻率升序排序。雖然我知道這是字數統計的延伸,但我不知道如何在Pyspark中做到這一點。任何幫助表示讚賞。Pyspark的Ngram頻率排名

回答

0

toolz

from toolz.curried import sliding_window 
from operator import add, itemgetter 

rdd = sc.textFile("README.md") 
tokens = rdd.map(str.split) 

counts = (tokens 
    .flatMap(sliding_window(3)) 
    .map(lambda x: (x, 1)) 
    .reduceByKey(add)) 

counts.top(3, key=itemgetter(1)) 

## [(('command,', 'which', 'should'), 2), 
## (('on', 'how', 'to'), 2), 
## (('Please', 'refer', 'to'), 2)] 

限制這種方法的一個可能的解決方案是非常相同像往常一樣 - 它在逐行的基礎上運行,所以如果文件跨越多行,你不會得到正克跨越線路界限。

可以通過跟蹤行號和位置或使用wholeTextFiles進行更正。