Ngram在Pyspark的频率排名

时间:2016-04-14 03:43:37

标签: python apache-spark pyspark

我想阅读一个相当大的文档并从中提取N-gram(N个单词的连续序列)。我还想按频率的升序排序。虽然我知道这是字数的延伸,但我不知道如何在Pyspark中这样做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

toolz

的一种可能解决方案
atg@lynntools01$ uname -a
SunOS lynntools01 5.10 Generic_150400-30 sun4v sparc sun4v

这种方法的局限性与通常几乎相同 - 它是逐行操作的,因此如果文档跨越多行,您将无法获得跨越线边界的n-gram。

可以通过跟踪行号和位置或使用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)] 来纠正错误。