Spark练习题--基础20题

数据如下:
班级ID 姓名 年龄 性别 科目 成绩
12 张三 25 男 chinese 50
12 张三 25 男 math 60
12 张三 25 男 english 70
12 李四 20 男 chinese 50
12 李四 20 男 math 50
12 李四 20 男 english 50
12 王芳 19 女 chinese 70
12 王芳 19 女 math 70
12 王芳 19 女 english 70
13 张大三 25 男 chinese 60
13 张大三 25 男 math 60
13 张大三 25 男 english 70
13 李大四 20 男 chinese 50
13 李大四 20 男 math 60
13 李大四 20 男 english 50
13 王小芳 19 女 chinese 70
13 王小芳 19 女 math 80
13 王小芳 19 女 english 70

package com.kgc.kb07

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object HomeWork {
  def main(args: Array[String]): Unit = {
    val session: SparkSession = SparkSession.builder().master("local[*]").appName("sparkSession").getOrCreate()
    val sc: SparkContext = session.sparkContext
    val a: RDD[String] = sc.textFile("D:\\A IDEA 2018.2.2\\Projects\\scala\\src\\main\\scala\\com\\kgc\\kb07\\data\\homework")
    //a.collect().foreach(println)
    val b = a.map(x => {
      val fields = x.split(" ")
      val ID = fields(0)
      val name = fields(1)
      val age = fields(2)
      val sex = fields(3)
      val course = fields(4)
      val score = fields(5)
      ( ID, name, age, sex, course, score)
    })
    //1、 一共有多少人参加考试?
    val l0 = b.map(_._2).distinct().count()
    println("参加考试学生共:"+l0)
    //2、一共有多少个小于20岁的人参加考试?
    val l1 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt<20).count()
    println("小于20岁的人:"+l1)
    //3、一共有多少个等于20岁的人参加考试?
    val l2 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt==20).count()
    println("等于20岁的人:"+l2)
    //4、一共有多少个大于20岁的人参加考试?
    val l3 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt>20).count()
    println("大于于20岁的人:"+l3)
    //5、一共有多个男生参加考试?
    val l4 = b.map(x=>(x._2,x._4)).distinct().filter(_._2=="男").count()
    println("共有男生"+l4+"人")
    //6、一共有多少个女生参加考试?
    val l5 = b.map(x=>(x._2,x._4)).distinct().filter(_._2=="女").count()
    println("共有男生"+l5+"人")
    //7、有多少人参加考试?
    val l6 = b.map(x=>(x._2)).distinct().count()
    println("共有学生"+l6+"人")
    //8、13班有多少人参加考试?
    val l7 = b.map(x=>(x._2,x._1)).distinct().filter(_._2.toInt==13).count()
    println("13班共有学生"+l7+"人")
    //9、语文科目的平均成绩是多少?
    val l8 = b.map(x=>(x._5,x._6)).filter(_._1.equals("chinese"))
    val l8_1 = l8.map(_._2.toInt).collect().sum
    val l8_2 = l8.map(_._2).collect().size
    val l8_3 = l8_1/l8_2
    println("语文科目的平均成绩是:"+l8_3)
    //10、数学科目的平均成绩是多少?
    val l9 = b.map(x=>(x._5,x._6)).filter(_._1.equals("math"))
    val l9_1 = l9.map(_._2.toInt).collect().sum
    val l9_2 = l9.map(_._2).collect().size
    val l9_3 = l9_1/l9_2
    println("数学科目的平均成绩是:"+l9_3)
    //11、英语科目的平均成绩是多少?
    val l10 = b.map(x=>(x._5,x._6)).filter(_._1.equals("english"))
    val l10_1 = l10.map(_._2.toInt).collect().sum
    val l10_2 = l10.map(_._2).collect().size
    val l10_3 = l10_1/l10_2
    println("英语科目的平均成绩是:"+l10_3)
    //12、单个人平均成绩是多少?
    val l11 = b.map(x=>(x._2,x._6.toInt)).groupByKey()
    l11.mapValues(x=>x.sum/x.size).collect().foreach(x=>{println("个人成绩是"+x)})
    //13、12班平均成绩是多少?
    val l12 = b.map(x=>(x._1,x._6.toInt)).filter(x=>(x._1=="12")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班的平均成绩是:"+l12.collect().mkString(","))
    //14、12班男生平均总成绩是多少?
    val l13 = b.filter(_._1=="12").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="男")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班男生的平均成绩是:"+l13.collect().mkString(" "))
    //15、12班女生平均总成绩是多少?
    val l14 = b.filter(_._1=="12").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="女")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班女生的平均成绩是:"+l14.collect().mkString(" "))
    //16、同理求13班相关成绩?13班男生平均总成绩是多少?
    val l15 = b.filter(_._1=="13").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="男")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("13班男生的平均成绩是:"+l15.collect().mkString(" "))
    //13班女生平均总成绩是多少?
    val l16 = b.filter(_._1=="13").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="女")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("13班女生的平均成绩是:"+l16.collect().mkString(" "))
    //17、全校语文成绩最高分是多少?
    val l17 = b.filter(_._5 == "chinese").map(_._6.toInt).max()
    println("全校语文成绩最高分是:"+l17)
    //18、12班语文成绩最低分是多少?
    val l18 = b.filter(_._5=="chinese").filter(_._1=="12").map(_._6.toInt).min()
    println("12班语文成绩最低分是:"+l18)
    //19、13班数学最高成绩是多少?
    val l19 = b.filter(_._5=="math").filter(_._1=="13").map(_._6.toInt).max()
    println("13班数学成绩最高分是:"+l19)
    //20、总成绩大于150分的12班的女生有几个?
    val l20 = b.filter(_._1=="12").filter(_._4=="女").map(x=>(x._2,x._6.toInt)).groupByKey().mapValues(x=>(x.sum>150)).count()
    println("总成绩大于150分的12班的女生有:"+l20)

    sc.stop()
  }
}


参加考试学生共:6
小于20岁的人:2
等于20岁的人:2
大于于20岁的人:2
共有男生4人
共有男生2人
共有学生613班共有学生3人
语文科目的平均成绩是:58
数学科目的平均成绩是:63
英语科目的平均成绩是:63
个人成绩是(张大三,63)
个人成绩是(李大四,53)
个人成绩是(王芳,70)
个人成绩是(张三,60)
个人成绩是(王小芳,73)
个人成绩是(李四,50)
12班的平均成绩是:(12,60)
12班男生的平均成绩是:(,55)
12班女生的平均成绩是:(,70)
13班男生的平均成绩是:(,58)
13班女生的平均成绩是:(,73)
全校语文成绩最高分是:70
12班语文成绩最低分是:50
13班数学成绩最高分是:80
1

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark是一个开源的大数据处理框架,可以处理大规模的数据集。而Spark SQL是Spark中的一个模块,用于处理结构化数据,支持SQL查询和DataFrame API。Spark SQL可以将结构化数据存储在分布式的列式存储系统中,并提供了高效的查询引擎,可以在大规模数据集上进行快速的查询和分析。Spark SQL还支持多种数据源,包括Hive、JSON、Parquet等。 ### 回答2: Spark是一个开源的大数据处理工具,它主要的特点是速度快、易于扩展和支持多种语言。Spark可以用于批处理、实时处理、机器学习、图处理、流处理等多个领域,并且可以在大多数基础设施上运行,如Hadoop、Mesos、Kubernetes等,为企业提供了更加便利灵活的大数据处理方案。 Spark SQL是Spark中的一个模块,它提供了一个基于SQL的接口以及齐全的支持,让用户可以方便地在Spark上进行结构化数据处理,如数据查询、聚合、过滤等。Spark SQL的优势在于其性能优异,它可以在不同的数据源上运行,包括Hive、Avro、Parquet等。 Spark SQL模块的核心组件为Catalyst,它是一个基于规则的优化器,可以自动优化查询计划,提高整体查询速度。Spark SQL支持多种查询API,包括SQL、DataFrame API和DataSet API,用户可以根据自己的需求选择不同的API来处理数据。 另外,Spark SQL支持数据格式的灵活转换,可以将不同数据源中的数据转换为DataFrame或DataSet格式,并且提供了丰富的数据源集成插件,如JDBC、MongoDB、Cassandra等。 总之,Spark以其快速、灵活、易于扩展的特性帮助企业更好地管理和处理大规模结构化数据,而Spark SQL则是Spark的重要组成部分,它提供SQL接口和优化器,让用户可以更加方便地处理和分析结构化数据。 ### 回答3: Spark是一个开源分布式数据处理框架,可以快速处理大规模数据集,支持多种数据源和数据处理方式,具有高效的计算能力和可扩展性。Spark SQL是Spark中的一个子项目,提供了一种基于SQL的接口,可以将结构化数据集集成到Spark中,支持SQL查询、数据聚合、连接和过滤等操作。Spark SQL支持多种数据源,包括Hive表、JSON、Parquet和CSV格式等,同时也支持DataFrame和Dataset等高级数据结构。Spark SQL还提供了Java、Scala和Python等多种编程语言接口,以便各种开发人员利用Spark SQL进行数据处理和分析。 Spark SQL的一个重要特性是DataFrame,它是一个分布式的数据集合,类似于关系型数据库中的表格,但是可以横向扩展到大规模数据集。DataFrame提供了Schema(数据结构)的定义和数据类型的推导,可以简化代码编写和数据处理过程。在Spark SQL中,DataFrame可以通过API进行操作,也可以通过SQL查询进行操作。Spark SQL还支持多种数据格式之间的转换,例如从JSON格式转换为Parquet格式,从CSV格式转换为Hive表格等。 Spark SQL的一个优势是可以与其他Spark组件集成,例如Spark Streaming、MLlib和GraphX等,使得数据处理和分析更加高效和简洁。Spark Streaming可以将实时数据处理与批处理数据处理相结合,使得数据处理和分析更加完整和有力。MLlib提供了机器学习算法的实现,可以快速进行数据挖掘和模型训练。GraphX提供了图形计算的能力,可以进行大规模的网络分析和数据可视化。 总之,Spark SQL是一个强大的数据处理框架,可以快速处理各种结构化数据集,并且可以与其他组件集成,实现高效的数据分析和挖掘。随着大数据时代的到来,Spark SQL将成为数据科学和工程师的必备工具之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值