Spark 综合实验1

2020-04-12
5分钟阅读时长

【版本】

当前版本号v20200412

版本修改说明
v20200412初始化版本

Spark 综合实验1

【实验目的】

测试同学们对 Spark RDD 和 Spark SQL的掌握能力

【实验数据说明】

  1. 请从下面链接下载练习数据:
https://pan.baidu.com/s/1Xj6s2evPcx8TpzpHkvjBDA#提取码u0jg
  1. people.csv 中的数据是中国第五次人口普查(2000年)和第六次人口普查(2010年)的数据。以下为数据列的说明
列序号说明
1地区名称
2户口地区类型,分别为 城市/镇/乡村
3户口集体类型,分别为 家庭户/集体户
4统计年份
5性别
6人数
  1. 其中户口地区类型分为三种,即城市、镇和乡村。每个地区类型下,又按集体类型分为两种,家庭户和集体户。

【实验环境】

  • 操作系统:Ubuntu 16.04
  • Spark:Spark 2.x

【实验要求】

  1. 对地区名称列需要进行清洗,统一31个地区名称。

提示1:先对地区名称进行分组和排序,看看有哪些地区名称不一致。

提示2:使用 RDD 的算子对地区名称进行清洗。


  1. 取2000年普查数据对比2010年普查数据,统计所有人口减少的地区,按减少数量从高到低排列。结果表头格式如下表所示。

期望结果:

表头分别为
|地区|2000年人数|2010年人数|人口减少数量|

+----+--------+--------+-------+
|dist|    anum|    bnum|     de|
+----+--------+--------+-------+
|湖北|59508870|57237727|2271143|
|四川|82348296|80417528|1930768|
|重庆|30512763|28846170|1666593|
|贵州|35247695|34748556| 499139|
+----+--------+--------+-------+

  1. 求2010年普查统计中,性别比最大的10个地区,按性别比从高到低排序,精确到小数点后2位。结果表头格式如下表所示。

注1:性别比=男人数/女人数*100 ,精确到小数点后2位

期望结果:


表头分别为:地区、男性数量、女性数量、性别比

+------+--------+--------+------+
|  dist|    mnum|    fnum|    mf|
+------+--------+--------+------+
|  天津| 6907091| 6031602|114.52|
|  海南| 4592283| 4079202|112.58|
|  广东|54400538|49919921|108.98|
|  广西|23924704|22099057|108.26|
|内蒙古|12838243|11868048|108.17|
|  云南|23856696|22110070|107.90|
|  青海| 2913793| 2712930|107.40|
|  陕西|19287575|18039804|106.92|
|  新疆|11270147|10545668|106.87|
|  北京|10126430| 9485938|106.75|
+------+--------+--------+------+

  1. 求2000年和2010年两次普查统计中,性别比变化最大的10个地区,按变化值从高到低排序,精确到小数点后2位。结果表头格式如下所示。

注2:性别比变化=绝对值 | 2010年性别比-2000年性别比 |

期望结果:

#表头分别为
|地区|2000年性别比|2010年性别比|上升或下降|变化值|

+------+------+------+-----+-----+
|  dist|    mf|    mf|trend|    c|
+------+------+------+-----+-----+
|  天津|103.81|114.52|    ↗|10.71|
|  重庆|107.98|102.61|    ↘| 5.37|
|  广东|103.68|108.98|    ↗| 5.30|
|  广西|112.73|108.26|    ↘| 4.47|
|  河南|106.46|102.05|    ↘| 4.41|
|  四川|106.97|103.13|    ↘| 3.84|
|  贵州|110.02|106.31|    ↘| 3.71|
|  安徽|106.57|103.39|    ↘| 3.18|
|  甘肃|107.59|104.42|    ↘| 3.17|
|  湖南|108.96|105.80|    ↘| 3.16|
|  湖北|108.61|105.55|    ↘| 3.06|
|  西藏|102.67|105.70|    ↗| 3.03|
|  吉林|104.89|102.67|    ↘| 2.22|
|  北京|108.93|106.75|    ↘| 2.18|
|  云南|110.06|107.90|    ↘| 2.16|
|黑龙江|104.54|102.85|    ↘| 1.69|
|  山西|107.21|105.56|    ↘| 1.65|
|  江西|108.16|106.67|    ↘| 1.49|
|  辽宁|104.01|102.54|    ↘| 1.47|
|  陕西|108.20|106.92|    ↘| 1.28|
|内蒙古|107.10|108.17|    ↗| 1.07|
|  江苏|102.55|101.52|    ↘| 1.03|
|  河北|103.63|102.84|    ↘| 0.79|
|  青海|106.69|107.40|    ↗| 0.71|
|  上海|105.68|106.19|    ↗| 0.51|
|  新疆|107.24|106.87|    ↘| 0.37|
|  福建|106.29|105.96|    ↘| 0.33|
|  宁夏|105.26|104.99|    ↘| 0.27|
|  浙江|105.51|105.69|    ↗| 0.18|
|  山东|102.50|102.33|    ↘| 0.17|
|  海南|112.54|112.58|    ↗| 0.04|
+------+------+------+-----+-----+

  1. 按八大经济区域的人数从2000年到2010年增长率,从高到低排序,增长率精确到小数点后2位。结果表头格式如下所示。

增长率公式:(2010年人数-2000年人数)/ 2000年人数

八大经济区域分类如下图所示:

省/直辖市/自治区经济区域区分
北京北部沿海
天津北部沿海
河北北部沿海
山东北部沿海
西藏大西北
甘肃大西北
青海大西北
宁夏大西北
新疆大西北
辽宁东北
吉林东北
黑龙江东北
上海东部沿海
江苏东部沿海
浙江东部沿海
山西黄河中游
内蒙古黄河中游
河南黄河中游
陕西黄河中游
福建南部沿海
广东南部沿海
海南南部沿海
广西西南
重庆西南
四川西南
贵州西南
云南西南
安徽长江中游
江西长江中游
湖北长江中游
湖南长江中游

期望结果:

列名为:经济区域、2000年人数、2010年人数、增长率

+--------+---------+---------+-----+
|   dtype|       s0|       s1|  inc|
+--------+---------+---------+-----+
|南部沿海|126881989|149886161|18.13|
|东部沿海|135381962|156107028|15.31|
|北部沿海|180074133|200197990|11.18|
|  大西北| 56509478| 62321316|10.28|
|黄河中游|182396515|191775710| 5.14|
|    东北|104864179|109513129| 4.43|
|长江中游|222180589|227006754| 2.17|
|    西南|234323381|236002781| 0.72|
+--------+---------+---------+-----+