Spark之根据单词频数降序排序的wordcount(Java8版)

package cn.spark.study.core;

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;

import java.util.Arrays;

public class SortWordCount {
    public static void main(String[] args) {
        SparkConf sparkConf=new SparkConf()
                .setAppName("WordCountLocal")
                .setMaster("local");
        JavaSparkContext sc=new JavaSparkContext(sparkConf);//将上面的配置信息加入到sparkContext中
        //针对输入源创建一个初始rdd。输入源的数据会打散分配到rdd的每个partition中形成初始的分布式数据集

        JavaRDD<String> lines =sc.textFile("C://Users//HP//Desktop//test.txt");
        //对初始rdd进行transformation操作
        //通常操作会通过创建function并配合rdd的map等算子进行执行
        //拆分成单词
        JavaRDD<String>words=lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());//这里的rdd还是很大的
        JavaPairRDD<String,Integer>pairs=words.mapToPair(word-> new Tuple2<>(word,1));//word变word加一个1
        JavaPairRDD<String,Integer>wordCounts=pairs.reduceByKey((x,y)->x+y);
        //新需求按单词频数降序排序(king,15)需要转换成(15,king)
        JavaPairRDD<Integer,String>countWords=wordCounts.mapToPair(word->new Tuple2<>(word._2,word._1));//键值对互换
        JavaPairRDD<Integer,String>sortedWords=countWords.sortByKey(false);
        JavaPairRDD<String,Integer>countWords2=sortedWords.mapToPair(word2->new Tuple2<>(word2._2,word2._1));//键值换回来
        countWords2.foreach(word3->System.out.println("单词:"+word3._1+"出现了"+word3._2+"次"));

        sc.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值