Spark数据分析

在互联网如此发达的今天,每天都有海量的数据产生。通过对这些的数据进行分析,我们可以挖掘出数据中的很多信息,从而获取商业价值。

面对如此海量的数据,一般的统计分析技术是无法胜任的,需要使用专门的大数据分析技术。今天我们介绍目前最为流行的数据处理技术—Apache Spark。Spark是一款支持多语言的,为大规模分布式数据处理而设计的一站式引擎,它整合了各种上层库,比如用于机器学习的MLlib、提供交互式查询功能的Spark SQL、支持操作实时数据的流处理库Structured Streaming,以及图计算库GraphX。这些库都提供了简单易用的API。

Spark快速大数据分析》教你如何应用Spark中的API进行各种复杂的大数据分析。通过学习本书,你将知道Spark基础架构,各种Spark数据操作的API,以及Spark应用的优化与调优。书中的实际案例让你能快速上手工作中的实际项目。

Spark实际案例

所有Spark操作和数据的统一入口是SparkSession,我们可以通过SparkSession对象执行各种Spark操作。使用如下代码来创建一个SparkSession对象。

import org.apache.spark.sql.SparkSession
val spark = SparkSession
  .builder
  .appName("LearnSpark")
  .config("spark.sql.shuffle.partitions", 6)
  .getOrCreate()

有了SparkSession对象,便可以读取我们需要分析的数据。Spark可以加在各种存储形式的数据,比如:CSV、JSON、TXT等。取书中的两个数据集:机场数据集(airport-codes-na.txt)和航班起飞延误数据集(departuredelays.csv)进行案例分析。

首先是读取我们需要的数据,并创建临时视图。

//获取机场数据集
val airports = spark.read
  .option("header", true)
  .option("inferschema", true)
  .option("delimiter", "\t")
  .csv("/databricks-datasets/learning-spark-v2/flights/airport-codes-na.txt")
airports.createOrReplaceTempView("airports")
//获取航班延误数据集
val departuredelays = spark.read
  .option("header", true)
  .csv("/databricks-datasets/learning-spark-v2/flights/departuredelays.csv")
departuredelays.createOrReplaceTempView("departuredelays")

获取数据之后,便可以通过函数airports.show()airports.count()查看机场数据的大概内容,如图所示
在这里插入图片描述
以及departuredelays.show()departuredelays.count()查看航班起飞延误数据的大概内容,如图所示
在这里插入图片描述
利用spark进行数据分析,比如:我们需要找出从西雅图(SEA)、旧金山(SFO)、纽约(JFK)出发分别飞往哪三个目的地机场的延误最多机场。

首先,我们需要求出从西雅图(SEA)、旧金山(SFO)、纽约(JFK)出发所有航班总延误时间。

val delay_statistics = spark.sql(s"""
	SELECT origin, destination, SUM(delay) AS totalDelays 
	FROM departuredelays 
	WHERE origin IN ('SEA', 'SFO', 'JFK') 
	GROUP BY  origin, destination""")
delay_statistics.createOrReplaceTempView("delaystatistics")

如下图为从西雅图(SEA)、旧金山(SFO)、纽约(JFK)出发所有航班总延误时间的统计结果:
在这里插入图片描述
然后,我们通过dense_rank()来统计从这三个机场起飞延误最严重的三个目的地。

val result = spark.sql(s"""
	SELECT origin, destination, totalDelays, rank 
	FROM  (SELECT origin, destination, totalDelays, dense_rank() 
		      OVER (PARTITION BY origin  ORDER BY totalDelays DESC) AS rank 
		   FROM delaystatistics) t 
	WHERE rank <= 3""")
result.show()

最后,我们得到的结果如下图所示。从结果可以看出,从西雅图起飞延误最严重的三个目的地分别是旧金山(SFO)、丹佛(DEN)、芝加哥(ORD),从旧金山起飞延误最严重的三个目的地分别是洛杉矶(LAX)、芝加哥(ORD)、纽约(JFK),从纽约起飞延误最严重的三个目的地分别是洛杉矶(LAX)、旧金山(SFO)、亚特兰大(ATL)。
在这里插入图片描述

以上是《Spark快速大数据分析》书中的一个小案例,书中还有更多高级的数据分析案例和Spark应用的优化和调优方法。对于希望学习Spark并想构建可伸缩的可靠大数据应用的数据科学家与数据工程师来说,本书是一个不错的选择。

  • 1
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值