练习题
-------------------------------以下使用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