大数据技术学习代码纪录——Spark

RDD

CalculateScoreSum.scala

package net.sherry.rdd

import org.apache.spark.{
    
    SparkConf, SparkContext}

/**
 * 功能:计算总分
 * 作者:sherry
 * 日期:2023年04月11日
 */
object CalculateScoreSum {
    
    
    def main(args: Array[String]): Unit = {
    
    
        // 创建Spark配置对象
        val conf = new SparkConf()
            .setAppName("CalculateScoreSum")
            .setMaster("local[*]")
        // 基于配置创建Spark上下文
        val sc = new SparkContext(conf)
        // 创建成绩列表
        val scores = List(
            ("张钦林", 78), ("张钦林", 90), ("张钦林", 76),
            ("陈燕文", 95), ("陈燕文", 88), ("陈燕文", 98),
            ("卢志刚", 78), ("卢志刚", 80), ("卢志刚", 60)
        )
        // 基于成绩列表创建RDD
        val rdd1 = sc.makeRDD(scores)
        // 对成绩RDD进行按键归约处理
        val rdd2 = rdd1.reduceByKey((x, y) => x + y)
        // 输出归约处理结果
        rdd2.collect.foreach(println)
    }
}

CalculateScoureSum02.scala

package net.sherry.rdd


import org.apache.spark.{
    
    SparkConf, SparkContext}

import scala.collection.mutable.ListBuffer

/**
 * 功能:计算总分
 * 作者:sherry
 * 日期:2023年04月11日
 */
object CalculateScoreSum02 {
    
    
    def main(args: Array[String]): Unit = {
    
    
        // 创建Spark配置对象
        val conf = new SparkConf()
            .setAppName("CalculateScoreSum")
            .setMaster("local[*]")
        // 基于配置创建Spark上下文
        val sc = new SparkContext(conf)

        // 创建四元组成绩列表
        val scores = List(
            ("张钦林", 78, 90, 76),
            ("陈燕文", 95, 88, 98),
            ("卢志刚", 78, 80, 60)
        )
        // 将四元组成绩列表转化成二元组成绩列表
        val newScores = new ListBuffer[(String, Int)]();
        // 通过遍历算子遍历四元组成绩列表
        scores.foreach(score => {
    
    
            newScores += Tuple2(score._1, score._2)
            newScores += Tuple2(score._1, score._3)
            newScores += Tuple2(score._1, score._4)}
        )
        // 基于二元组成绩列表创建RDD
        val rdd1 = sc.makeRDD(newScores)
        // 对成绩RDD进行按键归约处理
        val rdd2 = rdd1.reduceByKey((x, y) => x + y)
        // 输出归约处理结果
        rdd2.collect.foreach(println)
    }
}

WordCount.scala

package net.sherry.rdd

import org.apache.spark.{
    
    SparkConf, SparkContext}

object WordCount {
    
    
    def main(args: Array[String]): Unit = {
    
    
        // 创建Spark配置对象
        val conf = new SparkConf()
            .setAppName("SparkRDDWordCount")
            .setMaster("local[*]")
        // 基于配置创建Spark上下文
        val sc = new SparkContext(conf)
        var inputPath = ""
        var outputPath = ""
        if (args.length == 0){
    
    
            val inputPath = "hdfs://hadoop102:8020/wordcount/input/words.txt"
            val outputPath = "hdfs://hadoop102:8020/wordcount/output"
        }else if (args.length == 2){
    
    
            inputPath = args(0)
            outputPath = args(1)
        }else{
    
    
            println("温馨提示:命令提示行参数个数只能是0或2~")
            return 
        }

       val wc = sc.textFile(inputPath)
            .flatMap(_.split(" "))
            .map((_,1))
            .reduceByKey(_+_)
            .sortBy(_._2, false)
        wc.collect.foreach(println)
        wc.saveAsTextFile(outputPath)
        sc.stop()
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_53547097/article/details/130229743