Spark>sql练习题

练习题

-------------------------------以下使用Structured Streaming:-------------------------------
1、请使用Structured Streaming读取Socket数据,统计出每个单词的个数
2、请使用Structured Streaming读取student_info文件夹写的csv文件,
2.1、统计出文件中的男女生各有多少人
2.2、统计出姓“王”女生的人数
2.3、统计出姓“王”男生和女生的比例
3、请使用Structured Streaming读取department_info文件夹写的csv文件
3.1统计出各个院系的分别多少条信息
4、请使用Structured Streaming读取student_score文件夹写的csv文件
4.1、统计出每个班级的最高分数
4.2、统计出男生最高分
4.3、统计出女生最高分
4.4、分别统计出男生和女生的分数前三名
4.5、统计出分数在500分以上的人数
4.7、统计出分数在300分以下的人中男女各占多少

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

/**
  * 使用Structured Streaming读取Socket数据,把单词和单词的反转组成 json 格式写入到当前目录中的file文件夹中
  * (abc,cba)
  */
object demo01 {
   
def main(args: Array[String]): Unit = {
   
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("demo01")
      .getOrCreate()
    spark.sparkContext.setLogLevel("WARN")
    import spark.implicits._

  //获取每行的数据
    val lines: DataFrame = spark.readStream
      .format("socket") // 设置数据源
      .option("host", "cdh01")
      .option("port", 10000)
      .load
  //
    val words: DataFrame = lines.as[String].flatMap(line => {
   
      line.split("\\W+").map(word => {
   // \\W+  空格
        (word, word.reverse)
      })
    }).toDF("原单词", "反转单词")

    words.writeStream
      .outputMode("append")
      .format("json") //  // 支持 "orc", "json", "csv"
      .option("path", "./file") // 输出目录
      .option("checkpointLocation", "./ck1")  // 必须指定 checkpoint 目录
      .start
      .awaitTermination()
  }
}

import org.apache.spark.SparkContext
import org.apache.spark.sql.streaming.Trigger
import org.apache.spark.sql.types.{
   LongType, StringType, StructType}
import org.apache.spark.sql.{
   DataFrame, Dataset, Row, SparkSession}
/**
2、请使用Structured Streaming读取student_info文件夹写的csv文件,
2.1、统计出文件中的男女生各有多少人
2.2、统计出姓“王”女生的人数
2.3、统计出姓“王”男生和女生的比例*/
object demo02 {
   
  def main(args: Array[String]): Unit = {
   
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("ReadFromCSV")
      .getOrCreate()
    spark.sparkContext.setLogLevel("WARN")

    val student_info_schema: StructType = new StructType()
      .add("学号","string")
      .add("姓名","string")
      .add("性别","string")
      .add("班级编号","integer")
      .add("入学日期","String")


    //2.接收数据
    import spark.implicits._

    val student_info: DataFrame = spark.readStream
      .format("csv")
      .option("header","true")//说明csv文件有标题
      .schema(student_info_schema)
      .load("C:\\Users\\hasee\\Desktop\\4.16\\student_info")

    //2.1、统计出文件中的男女生各有多少人
    val result1: Dataset[Row] =
      student_info.groupBy("性别").count()
    //2.2、统计出姓“王”男生和女生的各有多少人
    val result2: Dataset[Row] =
      student_info.filter($"姓名" .startsWith("王") ).groupBy("性别").count()
    //输出结果
    result2.writeStream
      .format("console")
      .outputMode("complete")
      .trigger(Trigger.ProcessingTime(0))// 触发器 数字表示毫秒值. 0 表示立即处理
      .start()
      .awaitTermination()

  }
}
import org.apache.spark.sql.streaming.Trigger
import org.apache.spark.sql.{
   DataFrame, Dataset, Row, SparkSession}
import org.apache.spark.sql.types.StructType
/**
3、请使用Structured Streaming读取department_info文件夹写的csv文件
3.1统计出各个院系的分别多少条信息
*/
object demo03 {
   

  def main(args: Array[String]): Unit = {
   
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("ReadFromCSV")
      .getOrCreate()
    spark.sparkContext.setLogLevel("WARN")
    //读取数据
    //设置数据的结构
    val department_info_schema: StructType = new StructType()
      .add("院系编号", "string")
      .add("院系名称", "string")

    val department_info: DataFrame = spark.readStream
      .format("csv")
      .option
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值