大数据技术学习代码纪录——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()
}
}
更多推荐
所有评论(0)