莎士比亚统计最高的词频数 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 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();
	}

}

结果如下:

出现频率最高的十个词

莎士比亚统计最高的词频数 java,spark,rdd_第1张图片

 素材链接

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

你可能感兴趣的:(spark,java,big,data)