通过计算词语的词频,实现一个字典,字典键为名字,值为出现的次数,词频归一化 当前词语的出现次数/出现最多的词语次数-出现最少的词语次数,current_value/(max_value - min_value),循环每个词语的字段,最后构建字典{名字第一个字符:[(名字,对应频率),(),…]},类似{“病”:[[“病毒感染”,0.1],[“病毒性上呼吸道感染”,0.001],]
计算词频关键代码:
lines = sc.textFile(file_path)
result = lines.flatMap(lambda x:x.split(" ")).countByValue()
构建字典代码:
1.pkuseg.pktest() 对数据进行分词
2.配置spark context环境
3.循环要计算词频的目录分别计算每个文件的词频
4.生成字典 {名字第一个字符:[(名字,对应频率),(),…]}
困难:
1.加载spark context上下文失败,网上搜索了很多,包括改spark conf目录的配置文件等,无效
最后在程序里修改配置 ,跟电脑的配置有关
sc = SparkContext(conf=conf)
2.加载数据内存不够,计算词频内存溢出
解决办法:
更改加载文件方式从 sc.parallelize[]到sc.textFile(文件名) ,通过调用SparkContext的parallelize方法,在一个已经存在的Scala集合上创建的(一个Seq对象)。集合的对象将会被拷贝,创建出一个可以被并行操作的分布式数据集, 非常慢。