spark利用键值对对文章词统计

键值对的keys()和values()操作与python字典一样。

虽然同过count可以直接算出单词个数,但对每个具体字符的字符个数count未知,count只适合评估文件大小

import sys

from pyspark import SparkContext

if __name__ == "__main__":
    master = "local"
    if len(sys.argv) == 2:
        master = sys.argv[1]
    try:
        sc.stop() 
    except:
        pass
    sc = SparkContext(master, 'test')
    RDD1= sc.textFile('README.md')
    #统计所有字符个数
    print(RDD1.flatMap(lambda x:x.split()).count())
    #取10行
    print(RDD1.take(10))
    #对文章进行切分
    words = RDD1.flatMap(lambda x: x.split()) 
    #取10个元素
    print(words.take(10))
    #建立键值对,合并相同键值对
    result = words.map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y)
    #输出单词与单词数
#    print(result.collect())

    print(result.values().reduce(lambda x, y : x+y))
    print(sum(RDD1.flatMap(lambda x:x.split()).countByValue().values()))
    nums = words.map(lambda x: (x, 1))
    result = nums.combineByKey((lambda x: (x,1)),
                                 (lambda x, y: (x[0] + y, x[1] + 1)),
                                 (lambda x, y: (x[0] + y[0], x[1] + y[1])))
    print(result.map(lambda key, xy: (key, xy[0]/xy[1])).collectAsMap())

这里用了三种方式对单词进行统计

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容