莎士比亚统计最高的词频数 java,spark,rdd

问题描述:

统计莎士比亚诗文集中出现频次最高的100个单词,但是这100个单词中不包括停词表中那些没有实际意义的词。(所有数据已下载,在文件里)

思路:将莎士比亚诗文集文件夹下面的多个文件都读成 RDD,然后过滤掉停词表中的单词,统计频次最高的100个单词,并且保存结果在特定的文件夹即可。

package thisterm;

import java.util.Arrays;
import java.util.List;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import scala.Tuple2;

public class shaishibiya {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 SparkConf sparkConf = new SparkConf().setAppName("PeopleInfoCalculator").setMaster("local");
		    JavaSparkContext sc = new JavaSparkContext(sparkConf);
		    JavaRDD<String> dataFile = sc.textFile
		    		("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/shakespear/*".toLowerCase());//*是所有文件内容
		   
		    JavaRDD<String> rddstop=sc.textFile(
		    		"file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/stop.txt");//停顿词
		    JavaRDD<String> rdd0=rddstop.map(f->{//将停顿词变成首字母大写的
		    	return f.substring(0,1).toUpperCase()+
		    				f.substring(1).toLowerCase();
		    });
		    List<String> rdd00=rdd0.collect();//将rdd转成列表
		   // rdd0.foreach(f->System.out.println("rdd0="+f.trim()));  
		    List<String> liststop=rddstop.collect();
		    JavaRDD<String> rdd1=dataFile.map(f->f.trim().
		    		replaceAll("[\\pP+~$`^=|<>~`$^+=|<>¥×]" , ""));//trim()去首位空格replaceAll将奇怪的符号去掉
		    JavaRDD<String> rdd2=rdd1.map(f->f.replaceAll("\\s+", " "));//将连续的空格变成一个空格
		   JavaRDD<String> rdd3=rdd2.flatMap(f->Arrays.asList(f.split(" ")).iterator());//用空格分开
		   JavaRDD<String> daxiao=rdd3.filter(f->!rdd00.contains(f));//只能过滤列表,过滤含有大写停顿词的
		   JavaRDD<String> rdd4=daxiao.filter(f->!liststop.contains(f));//只能过滤列表,过滤含有小写停顿词的
		   JavaRDD<String> rdd5=rdd4.filter(f->{
			   if(f.length()==0)
				  return false;
			   else
				   return true;
		   });
		   JavaPairRDD<String,Integer> rdd6=rdd5.mapToPair(f->new Tuple2<>(f.trim(),1));
		   JavaPairRDD<String,Integer> rdd7=rdd6.reduceByKey((x,y)->x+y);
		  JavaPairRDD<Integer,String> rdd8=rdd7.mapToPair(f->new Tuple2<>(f._2,f._1));
		 JavaPairRDD<Integer,String> rdd9=rdd8.sortByKey(false,2);//sortByKey根据key排序
		 System.err.println("193080204");
		 List<Tuple2<Integer, String>> rdd10=rdd9.take(100);
		 //rdd9.saveAsTextFile("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/shasbya");
		 for(Tuple2<Integer, String> aa:rdd10) {
				System.err.println("  "+aa);
			}
sc.stop();
	}

}

结果如下:

出现频率最高的十个词

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANzkxMemCo-S4qumdkg==,size_14,color_FFFFFF,t_70,g_se,x_16

 素材链接

链接:https://pan.baidu.com/s/1diZcPFsTYyCe9u-uici8qw 
提取码:5hyj 
--来自百度网盘超级会员V3的分享

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚与蓝莓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值