Apache Spark 练习三:使用Spark SQL分析新冠肺炎疫情数据

本文依然延续使用《Apache Spark 练习一:使用RDD分析新冠肺炎疫情数据》中的数据进行分析。

0. 数据预处理

import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder()
  .appName("Coronavirus")
  .getOrCreate()
import spark.implicits._

// 读取源数据
val df = spark.read
  .option("header", value = true)
  .csv("hdfs:///SparkLearning/us-counties.csv")
  .withColumns(
    Map(
      "cases" -> $"cases".cast("int"),
      "deaths" -> $"deaths".cast("int")
    )
  )
// 注册为临时视图
df.createOrReplaceTempView("us_covid_19")

1. 统计美国截止每日的累计确诊人数和累计死亡人数

val res = spark.sql("""
       |SELECT date, SUM(cases) AS total_cases, SUM(deaths) AS total_deaths
       |FROM us_covid_19
       |GROUP BY date
       |ORDER BY date
       |""".stripMargin)

2. 统计截至2020.5.19,美国累计确诊人数最多的十个州

val res = spark.sql("""
       |SELECT state, SUM(cases) AS total_cases
       |FROM us_covid_19
       |WHERE date = "2020-05-19"
       |GROUP BY state
       |ORDER BY total_cases DESC
       |LIMIT 10
       |""".stripMargin)

3. 统计截止2020.5.19,全美各州的病死率

val res = spark.sql("""
       |SELECT state, ROUND(SUM(deaths) / SUM(cases), 4) AS death_rate
       |FROM us_covid_19
       |WHERE date = "2020-05-19"
       |GROUP BY state
       |ORDER BY state
       |""".stripMargin)

4. 统计美国每日的新增确诊人数

val res = spark.sql("""
        |WITH daily_cases AS (
        |  SELECT date, SUM(cases) AS total_cases
        |  FROM us_covid_19
        |  GROUP BY date
        |)
        |SELECT t1.date, t1.total_cases - t2.total_cases AS new_cases
        |FROM daily_cases AS t1 JOIN daily_cases AS t2 ON DATEDIFF(t1.date, t2.date) = 1
        |ORDER BY t1.date
        |""".stripMargin)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值