军用大数据 - 结构化数据分析与处理

第1关:Spark SQL入门

1、Spark SQL程序的入口?

C、SparkSession

2、Spark SQL 为了支持结构化数据的处理,它提供了哪两个编程抽象?

A、DataFrame

B、Dataset

第2关:使用Spark SQL统计战斗机飞行性能

任务描述

通过飞行速度统计出战斗机飞行性能排比。

相关知识

本关使用 mySQL 统计战斗机飞行性能。

编程要求

请补全右侧 Begin - End 处代码,统计出全球飞行速度排名前三的战斗机。

本实训提供一份全球战斗机相关指标参数的 Json 数据(数据在 /root/jun.json)。

其中一条数据如下:

{"发动机数量":"双发","武器装备":"(1)机炮:30 mm机炮 150发; (2)导弹:鹰击-62反舰巡航导弹,鹰击-83反舰导弹,鹰击-91反舰导弹,鹰击-9多用途导弹,雷电-10反辐射导弹,霹雳-8空空导弹,霹雳-11空空导弹,霹雳-12中程空空导弹; (3)炸弹:雷霆2-雷射导引弹,雷石6-滑翔炸弹,200A反机场炸弹,通用炸弹500千克,1500千克。","发动机":"AL-31F涡扇发动机","机长":"21.19米","名称":"歼-16战机","乘员":"2人","关注度":"(5分)","研发单位":"中国沈阳飞机公司","气动布局":"后掠翼","机高":"5.9米","最大飞行速度":"1,438千米每小时","翼展":"14.7米","最大航程":"4,288千米","飞行速度":"超音速","首飞时间":"2011年10月17日"}

每条 Json 数据里可能有不同数量的成员,成员的值可能为空。

统计出指标后将结果以 csv 格式保存到 /root/airspark 目录。

# coding=utf-8
from pyspark.sql import SparkSession
#**********Begin**********#
#创建SparkSession
spark = SparkSession \
    .builder \
    .appName("Python Spark SQL ") \
    .master("local")\
    .getOrCreate()
#读取/root/jun.json中数据
df = spark.read.json("/root/jun.json").coalesce(1)
#创建视图
df.createOrReplaceTempView("table1")
#统计出全球飞行速度排名前三的战斗机
out=spark.sql("select cast(regexp_replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),'\\\,','') as float) as speed,`名称` from table1  order by cast(regexp_replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),'\\\,','') as float)  DESC limit 3")
#保存结果
out.write.mode("overwrite").format("csv").save("/root/airspark")
#**********End**********#
spark.stop()

第3关:使用Spark SQL统计各个研发单位研制战斗机占比

任务描述

统计出各个研发单位研制战斗机占比。

相关知识

使用 Spark SQL 统计各个研发单位研制战斗机占比。

# coding=utf-8
from pyspark.sql import SparkSession
#**********Begin**********#
#创建SparkSession
spark = SparkSession \
    .builder \
    .appName("Python Spark SQL ") \
    .master("local")\
    .getOrCreate()
#读取/root/jun.json中数据
df = spark.read.json("/root/jun.json").coalesce(1)
#创建视图
df.createOrReplaceTempView("table1")
#统计出全球各研发单位研制的战斗机在全球所有战斗机中的占比
out=spark.sql("select   concat(round(count(`研发单位`)*100/(select count(`研发单位`) as num from table1 where `研发单位` is not null and `名称`is not null ),2),'%') as ratio, `研发单位` from table1  where  `研发单位` is not null and `名称`is not null group by  `研发单位`")
#保存结果
out.write.mode("overwrite").format("csv").save("/root/airspark")
#**********End**********#
spark.stop()

猜你喜欢

转载自blog.csdn.net/Elm_Forest/article/details/128306330