问题描述:
统计莎士比亚诗文集中出现频次最高的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();
}}
结果如下:
出现频率最高的十个词
文章图片
素材链接
链接:https://pan.baidu.com/s/1diZcPFsTYyCe9u-uici8qw
提取码:5hyj
--来自百度网盘超级会员V3的分享
推荐阅读
- 技术-大数据|转(Spark案例:Scala版统计单词个数)
- Spark Streaming词频统计实例
- 大数据|Spark 之 RDD转换算子
- Spark基础学习笔记|Spark RDD案例(词频统计)
- spark|spark案例-词频统计(存储数据库)
- 单片机|SWM32系列教程3-时钟配置和GPIO
- java|Android App 沉浸式状态栏解决方案
- 进阶学习|进阶学习之jvm优化
- java面试题|Java面试题(2022全面复习java)