大数据之Spark Sql

 

有文件如下:请使用Spark sql完成以下功能:

校区 班级 成才率 出勤率 平均分

上地 1704K 91 99 93

上海 1704G 89 99 94

上地 1601A 79 99 88

上地 1602A 69 98 78

上地 1603A 59 98 68

上地 1604A 89 98 98

上地 1701A 99 99 78

上地 1702A 99 98 88

上海 1703A 95 97 98

上海 1703B 85 97 88

上地 1703C 75 97 78

上海 1703D 96 99 68

上地 1704F 94 99 90

上海 1704E 95 100 92

 

要求:

(1)读取文件,解析文件(4分)

(2)将以上数据注册成studeng_scores临时表(4分)

(3)打印出综合分数(各项数值之和)排在前5的班级校区和对应的名称(5分)

(4)打印出成才率大于60的班级(5分)

(5)将以上数据按照成材率倒序排序,若成材率相同则出勤率倒序排序输出(5分)

分别计算上地、上海校区成材率的平均值(5分)

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}

object Test3 {

System.setProperty("hadoop.home.dir","E:/x3/hadoop-2.9.2")

def main(args: Array[String]): Unit = {

val spark: SparkSession = SparkSession.builder().appName("test3").master("local").getOrCreate()

val dataRDD: RDD[String] = spark.sparkContext.textFile("C:\\Users\\s1378\\Desktop\\week3data2/test3.txt")
//除去首行
val linesRDD: RDD[String] = dataRDD.zipWithIndex().filter(line => line._2>=1).map(line => line._1)

val lineRDD: RDD[(String, String, Int, Int, Int)] = linesRDD.map(line => {
val arr: Array[String] = line.split(" ")
(arr(0),arr(1),arr(2).toInt,arr(3).toInt,arr(4).toInt)
})

import spark.implicits._
val dataDF: DataFrame = lineRDD.toDF("schoolName","className","chengcai","chuqin","avgAll")

dataDF.createTempView("student")
//综合分数(各项数值之和)排在前5的班级校区和对应的名称
//spark.sql("select schoolName,className,(chengcai+chuqin+avgAll) sumAll from student order by sumAll desc limit 5").show()

//成才率大于60的班级
//spark.sql("select className from student where chengcai > 60").show()

//按照成材率倒序排序,若成材率相同则出勤率倒序排序输出
//spark.sql("select * from student order by chengcai desc,chuqin desc").show()

//分别计算上地、上海校区成材率的平均值
spark.sql("select schoolName,avg(chengcai) ccavg from student group by schoolName").show()


spark.stop()
}
}

大数据之Spark Sql

上一篇:【数据库】-- 无损分解和保持依赖


下一篇:SpringBoot设置mysql的ssl连接