疫情无情人有情!
众志成城,抗击疫情。
目前疫情防控形势严峻复杂,使用 Spark SQL 分析疫情数据
一,项目需求
1、湖北籍人员信息
2、武汉疫区人员信息
3、需要对员工进行隔离观察14天的公司
4、有感染风险的车厢
5、需要隔离观察的人员信息
二, 项目信息
1> civic_info.csv
2> ticket_info.csv
1>civic_info.csv:公民信息表
对civic_info.csv进行一个简单的分析
id_no:编号
name:姓名
sex :性别
age :年龄
province:省份
city:城市
district:区
residence:住宅
home_domicile:居住地
working_company:工作公司
2>ticket_info.csv:票务信息表
对ticket_info.csv表进行一个简单的分析
ticket_no:票号
train_no:列车号
carriage_no:马车号
seat_no:座位号
passenger_name:乘客姓名
passenger_id:乘客身份证
departure:离开 地方
destination:目的地
departure_time:出发时间
arrival_time:到达时间
三,架构、代码
项目结构
资源文件放在input文件夹下, 项目Demo是:ProjectTest
代码实现
pro.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aaa</groupId>
<artifactId>Scala</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
</project>
ProjectTest
package Scala_DataType
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
object ProjectTest {
def main(args: Array[String]): Unit = {
//获取配置信息 创建SparkSession
val conf:SparkConf=new SparkConf().setMaster("local[*]").setAppName("ProjectTest")
val Spark:SparkSession=SparkSession.builder().config(conf).getOrCreate()
//转换成DataFrame格式
import Spark.implicits._
//票务信息 读取文件 ticket_info.csv
val ticketDF: DataFrame=Spark.read.format("csv")
.option("header",true)
.option("multiLine",true)
.load("input/ticket_info.csv")
//把DF转换成DS
val ticketDS: Dataset[Ticket]=ticketDF.as[Ticket]
//临时视图
ticketDS.createOrReplaceTempView("Ticket")
//人员信息
val UserDF:DataFrame=Spark.read.format("csv")
.option("header",true)
.option("multiLine",true)
.load("input/civic_info.csv")
//把DF转成DS
val UserDS: Dataset[User]=UserDF.as[User]
UserDS.createOrReplaceTempView("User")
//汇总信息 left join 左链接
val df:DataFrame=Spark.sql("select * from Ticket left join User on Ticket.passenger_name = User.name")
//临时视图
df.createOrReplaceTempView("RS")
// df.show()
// Spark.sql("select * from RS where")
// Spark.sql("select * from Ticket,User where Ticket.passenger_name=User.name")
//1湖北籍人员信息
val frame:DataFrame=Spark.sql("select id_no,name,sex,age,province,city,district,residence,home_domicile,working_company from User where province='湖北'" )
frame.show()
//2武汉疫区人员信息
val wuhan:DataFrame=Spark.sql("select id_no,name,sex,age,province,city,district,residence,home_domicile,working_company from User where province='湖北' and city='武汉'")
wuhan.show()
//3、需要对员工进行隔离观察14天的公司 departure离开武汉的人
val Company:DataFrame=Spark.sql("select home_domicile,working_company from User where province='湖北' and city='武汉'")
Company.show()
//4、有感染风险的车厢
val car:DataFrame=Spark.sql("select train_no,carriage_no from RS where departure='武汉'")
car.show()
//5、需要隔离观察的人员信息
val wuhanhome:DataFrame=Spark.sql("select id_no,name,sex,age,province,city,district,residence,home_domicile,working_company from User where province='湖北' and city='武汉'")
wuhanhome.show()
}
}
//case 样例类
case class Ticket( //票务
ticket_no:String,
train_no:String,
carriage_no:String,
seat_no:String,
passenger_name:String,
passenger_id:String,
departure:String,
destination:String,
departure_time:String,
arrival_time:String
)
case class User( //人员
id_no:String,
name:String,
sex:String,
age:String,
province:String,
city:String,
district:String,
residence:String,
home_domicile:String,
working_company:String
)
程序结果显示
1、湖北籍人员信息
+------------------+----+---+---+--------+----+--------+------------------+-------------------+---------------+
| id_no|name|sex|age|province|city|district| residence| home_domicile|working_company|
+------------------+----+---+---+--------+----+--------+------------------+-------------------+---------------+
|310228198706300137| 李言| 男| 33| 湖北| 武汉| 江岸区|湖北省武汉市江岸区XXX小区NNN室| 上海市松江区XXX小区MMM室| XXX有限公司|
|310228198808241049| 朱艳| 女| 32| 湖北| 武汉| 江汉区|湖北省武汉市江汉区XXX小区NNN室| 上海市嘉定区XXX小区MMM室| YYY有限公司|
|310228198907141175| 肖人风| 男| 31| 湖北| 武汉| 汉阳区|湖北省武汉市汉阳区XXX小区NNN室| 上海市浦东新区XXX小区MMM室| ZZZ有限公司|
|310228199009212154| 黄军| 男| 30| 湖北| 武汉| 青山区|湖北省武汉市青山区XXX小区NNN室| 上海市黄浦区XXX小区MMM室| TTT有限公司|
|310228199101304567| 周子明| 男| 29| 湖北| 武汉| 洪山区|湖北省武汉市洪山区XXX小区NNN室| 上海市闵行区XXX小区MMM室| FFF有限公司|
|310228199204213278| 张燕| 女| 28| 湖北| 武汉| 江夏区|湖北省武汉市江夏区XXX小区NNN室| 上海市静安区XXX小区MMM室| SSS有限公司|
|310228199305213306| 江大仁| 男| 27| 湖北| 武汉| 蔡甸区|湖北省武汉市蔡甸区XXX小区NNN室| 上海市长宁区XXX小区MMM室| UUU有限公司|
|310228199411010721| 袁天罡| 男| 26| 湖北| 武汉| 黄陂区|湖北省武汉市黄陂区XXX小区NNN室| 上海市虹口区XXX小区MMM室| III有限公司|
|310228199503220823| 马鹏| 男| 25| 湖北| 武汉| 硚口区|湖北省武汉市硚口区XXX小区NNN室| 上海市徐汇区XXX小区MMM室| PPP有限公司|
|310228199608120317| 聂平| 男| 24| 湖北| 黄冈| 黄州区|湖北省黄冈市黄州区XXX小区NNN室|湖北省武汉市东西湖区XXX小区MMM室| WWW有限公司|
|310228199609170831| 胡冰| 女| 24| 湖北| 孝感| 孝南区|湖北省孝感市孝南区XXX小区NNN室| 湖北省武汉市江夏区XXX小区MMM室| QQQ有限公司|
+------------------+----+---+---+--------+----+--------+------------------+-------------------+---------------+
2、武汉疫区人员信息
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
| id_no|name|sex|age|province|city|district| residence| home_domicile|working_company|
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
|310228198706300137| 李言| 男| 33| 湖北| 武汉| 江岸区|湖北省武汉市江岸区XXX小区NNN室| 上海市松江区XXX小区MMM室| XXX有限公司|
|310228198808241049| 朱艳| 女| 32| 湖北| 武汉| 江汉区|湖北省武汉市江汉区XXX小区NNN室| 上海市嘉定区XXX小区MMM室| YYY有限公司|
|310228198907141175| 肖人风| 男| 31| 湖北| 武汉| 汉阳区|湖北省武汉市汉阳区XXX小区NNN室|上海市浦东新区XXX小区MMM室| ZZZ有限公司|
20/02/10 15:16:55 INFO SparkSqlParser: Parsing command: select home_domicile,working_company from User where province='湖北' and city='武汉'
|310228199009212154| 黄军| 男| 30| 湖北| 武汉| 青山区|湖北省武汉市青山区XXX小区NNN室| 上海市黄浦区XXX小区MMM室| TTT有限公司|
|310228199101304567| 周子明| 男| 29| 湖北| 武汉| 洪山区|湖北省武汉市洪山区XXX小区NNN室| 上海市闵行区XXX小区MMM室| FFF有限公司|
|310228199204213278| 张燕| 女| 28| 湖北| 武汉| 江夏区|湖北省武汉市江夏区XXX小区NNN室| 上海市静安区XXX小区MMM室| SSS有限公司|
|310228199305213306| 江大仁| 男| 27| 湖北| 武汉| 蔡甸区|湖北省武汉市蔡甸区XXX小区NNN室| 上海市长宁区XXX小区MMM室| UUU有限公司|
|310228199411010721| 袁天罡| 男| 26| 湖北| 武汉| 黄陂区|湖北省武汉市黄陂区XXX小区NNN室| 上海市虹口区XXX小区MMM室| III有限公司|
|310228199503220823| 马鹏| 男| 25| 湖北| 武汉| 硚口区|湖北省武汉市硚口区XXX小区NNN室| 上海市徐汇区XXX小区MMM室| PPP有限公司|
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
3、需要对员工进行隔离观察14天的公司
+----------------+---------------+
| home_domicile|working_company|
+----------------+---------------+
| 上海市松江区XXX小区MMM室| XXX有限公司|
| 上海市嘉定区XXX小区MMM室| YYY有限公司|
|上海市浦东新区XXX小区MMM室| ZZZ有限公司|
| 上海市黄浦区XXX小区MMM室| TTT有限公司|
| 上海市闵行区XXX小区MMM室| FFF有限公司|
| 上海市静安区XXX小区MMM室| SSS有限公司|
| 上海市长宁区XXX小区MMM室| UUU有限公司|
| 上海市虹口区XXX小区MMM室| III有限公司|
| 上海市徐汇区XXX小区MMM室| PPP有限公司|
+----------------+---------------+
4、有感染风险的车厢
+--------+-----------+
|train_no|carriage_no|
+--------+-----------+
| SH6634| B|
| SH6634| C|
| SH6634| D|
| SH6634| A|
| SH6634| C|
| SH6634| D|
20/02/10 15:16:55 INFO SparkSqlParser: Parsing command: select id_no,name,sex,age,province,city,district,residence,home_domicile,working_company from User where province='湖北' and city='武汉'
| SH6634| E|
| SH6634| A|
| SH6634| B|
+--------+-----------+
5、需要隔离观察的人员信息
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
| id_no|name|sex|age|province|city|district| residence| home_domicile|working_company|
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
|310228198706300137| 李言| 男| 33| 湖北| 武汉| 江岸区|湖北省武汉市江岸区XXX小区NNN室| 上海市松江区XXX小区MMM室| XXX有限公司|
|310228198808241049| 朱艳| 女| 32| 湖北| 武汉| 江汉区|湖北省武汉市江汉区XXX小区NNN室| 上海市嘉定区XXX小区MMM室| YYY有限公司|
|310228198907141175| 肖人风| 男| 31| 湖北| 武汉| 汉阳区|湖北省武汉市汉阳区XXX小区NNN室|上海市浦东新区XXX小区MMM室| ZZZ有限公司|
|310228199009212154| 黄军| 男| 30| 湖北| 武汉| 青山区|湖北省武汉市青山区XXX小区NNN室| 上海市黄浦区XXX小区MMM室| TTT有限公司|
|310228199101304567| 周子明| 男| 29| 湖北| 武汉| 洪山区|湖北省武汉市洪山区XXX小区NNN室| 上海市闵行区XXX小区MMM室| FFF有限公司|
|310228199204213278| 张燕| 女| 28| 湖北| 武汉| 江夏区|湖北省武汉市江夏区XXX小区NNN室| 上海市静安区XXX小区MMM室| SSS有限公司|
|310228199305213306| 江大仁| 男| 27| 湖北| 武汉| 蔡甸区|湖北省武汉市蔡甸区XXX小区NNN室| 上海市长宁区XXX小区MMM室| UUU有限公司|
|310228199411010721| 袁天罡| 男| 26| 湖北| 武汉| 黄陂区|湖北省武汉市黄陂区XXX小区NNN室| 上海市虹口区XXX小区MMM室| III有限公司|
|310228199503220823| 马鹏| 男| 25| 湖北| 武汉| 硚口区|湖北省武汉市硚口区XXX小区NNN室| 上海市徐汇区XXX小区MMM室| PPP有限公司|
+------------------+----+---+---+--------+----+--------+------------------+----------------+---------------+
共勉:
新手上路!求大神多带带。多提意见。