莎士比亚统计最高的词频数 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 stubSparkConf 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;elsereturn 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();}}
结果如下:
出现频率最高的十个词
素材链接
链接:
提取码:5hyj
--来自百度网盘超级会员V3的分享
莎士比亚统计最高的词频数 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 stubSparkConf 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;elsereturn 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();}}
结果如下:
出现频率最高的十个词
素材链接
链接:
提取码:5hyj
--来自百度网盘超级会员V3的分享