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

问题描述:
统计莎士比亚诗文集中出现频次最高的100个单词,但是这100个单词中不包括停词表中那些没有实际意义的词。(所有数据已下载,在文件里)
【spark|莎士比亚统计最高的词频数 java,spark,rdd】思路:将莎士比亚诗文集文件夹下面的多个文件都读成 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 dataFile = sc.textFile ("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/shakespear/*".toLowerCase()); //*是所有文件内容JavaRDD rddstop=sc.textFile( "file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/stop.txt"); //停顿词 JavaRDD rdd0=rddstop.map(f->{//将停顿词变成首字母大写的 return f.substring(0,1).toUpperCase()+ f.substring(1).toLowerCase(); }); List rdd00=rdd0.collect(); //将rdd转成列表 // rdd0.foreach(f->System.out.println("rdd0="+f.trim())); List liststop=rddstop.collect(); JavaRDD rdd1=dataFile.map(f->f.trim(). replaceAll("[\\pP+~$`^=|<>~`$^+=|<>¥×]" , "")); //trim()去首位空格replaceAll将奇怪的符号去掉 JavaRDD rdd2=rdd1.map(f->f.replaceAll("\\s+", " ")); //将连续的空格变成一个空格 JavaRDD rdd3=rdd2.flatMap(f->Arrays.asList(f.split(" ")).iterator()); //用空格分开 JavaRDD daxiao=rdd3.filter(f->!rdd00.contains(f)); //只能过滤列表,过滤含有大写停顿词的 JavaRDD rdd4=daxiao.filter(f->!liststop.contains(f)); //只能过滤列表,过滤含有小写停顿词的 JavaRDD rdd5=rdd4.filter(f->{ if(f.length()==0) return false; else return true; }); JavaPairRDD rdd6=rdd5.mapToPair(f->new Tuple2<>(f.trim(),1)); JavaPairRDD rdd7=rdd6.reduceByKey((x,y)->x+y); JavaPairRDD rdd8=rdd7.mapToPair(f->new Tuple2<>(f._2,f._1)); JavaPairRDD rdd9=rdd8.sortByKey(false,2); //sortByKey根据key排序 System.err.println("193080204"); List> rdd10=rdd9.take(100); //rdd9.saveAsTextFile("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/shasbya"); for(Tuple2 aa:rdd10) { System.err.println(""+aa); } sc.stop(); }}

结果如下:
出现频率最高的十个词
spark|莎士比亚统计最高的词频数 java,spark,rdd
文章图片

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

    推荐阅读