【pyspark学习从入门到精通9】DataFrames_4

目录

使用 SQL 查询

行数

使用 where 子句运行过滤语句

DataFrame 场景 – 准时航班性能

准备源数据集 

连接航班性能和机场

可视化我们的航班性能数据


使用 SQL 查询

让我们运行相同的查询,只是这一次,我们将使用 SQL 查询相同的 DataFrame。请记住,这个 DataFrame 是可访问的,因为我们为 swimmers 执行了 .createOrReplaceTempView 方法。

行数

以下是使用 SQL 获取 DataFrame 行数的代码片段:

spark.sql("select count(1) from swimmers").show()


输出如下:

使用 where 子句运行过滤语句

要使用 SQL 运行过滤语句,您可以使用 where 子句,如下所示的代码片段:

# Get the id, age where age = 22 in SQL
spark.sql("select id, age from swimmers where age = 22").show()

这个查询的输出是选择 id 和 age 列,其中 age = 22:

与 DataFrame API 查询一样,如果我们想要获取眼睛颜色以字母 b 开头的游泳者的名称,我们也可以像下面这样使用 like 语法:

spark.sql(
"select name, eyeColor from swimmers where eyeColor like 'b%'").show()

输出如下:

DataFrame 场景 – 准时航班性能

为了展示您可以使用 DataFrames 进行的查询类型,让我们看看准时航班性能的用例。我们将分析航空公司准时性能和航班延误原因:准时数据(http://bit.ly/2ccJPPM),并与从 Open Flights 机场、航空公司和航线数据(http://bit.ly/2ccK5hw)获得的机场数据集连接,以更好地了解与航班延误相关的变量。

准备源数据集 

我们首先通过指定文件路径位置并使用 SparkSession 导入来处理源机场和航班性能数据集:

# Set File Paths
flightPerfFilePath = 
"/databricks-datasets/flights/departuredelays.csv"
airportsFilePath = 
"/databricks-datasets/flights/airport-codes-na.txt"
# Obtain Airports dataset
airports = spark.read.csv(airportsFilePath, header='true', 
inferSchema='true', sep='\t')
airports.createOrReplaceTempView("airports")
# Obtain Departure Delays dataset
flightPerf = spark.read.csv(flightPerfFilePath, header='true')
flightPerf.createOrReplaceTempView("FlightPerformance")
# Cache the Departure Delays dataset 
flightPerf.cache()

注意我们使用 CSV 阅读器(com.databricks.spark.csv)导入数据,它适用于任何指定的分隔符(请注意机场数据是以制表符分隔的,而航班性能数据是以逗号分隔的)。最后,我们缓存航班数据集,以便后续查询更快。

连接航班性能和机场

DataFrames/SQL 中更常见的任务之一是连接两个不同的数据集;这通常是从性能角度来说要求更高的操作之一。使用 DataFrames,这些连接的许多性能优化默认情况下都包括在内:

# Query Sum of Flight Delays by City and Origin Code 
# (for Washington State)
spark.sql("""
select a.City, 
f.origin, 
sum(f.delay) as Delays 
from FlightPerformance f 
join airports a 
on a.IATA = f.origin
where a.State = 'WA'
group by a.City, f.origin
order by sum(f.delay) desc"""
).show()

在我们的情景中,我们正在查询华盛顿州城市的总延误和起源代码。这将需要按国际航空运输协会(IATA)代码连接航班性能数据和机场数据。查询的输出如下:

使用笔记本(如 Databricks、iPython、Jupyter 和 Apache Zeppelin),您可以更轻松地执行和可视化查询。在以下示例中,我们将使用 Databricks 笔记本。在我们的 Python 笔记本中,我们可以使用 %sql 函数在笔记本单元格内执行 SQL 语句:

%sql
-- Query Sum of Flight Delays by City and Origin Code (for Washington 
State)
select a.City, f.origin, sum(f.delay) as Delays
 from FlightPerformance f
 join airports a
 on a.IATA = f.origin
 where a.State = 'WA'
 group by a.City, f.origin
 order by sum(f.delay) desc

这与前面的查询相同,但由于格式化,更易于阅读。在我们的 Databricks 笔记本示例中,我们可以快速将这些数据可视化为条形图:

可视化我们的航班性能数据

让我们继续可视化我们的数据,但按美国大陆所有州来分解:

%sql
-- Query Sum of Flight Delays by State (for the US)
select a.State, sum(f.delay) as Delays
 from FlightPerformance f
 join airports a
 on a.IATA = f.origin
 where a.Country = 'USA'
 group by a.State

输出的条形图如下:

但是,如果将这些数据以地图的形式查看会更酷;点击图表左下角的条形图图标,您可以选择许多不同的原生导航,包括地图:

DataFrames 的一个关键好处是信息被结构化类似于表格。因此,无论您是使用笔记本还是您最喜欢的 BI 工具,您都能够快速可视化您的数据。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木流年追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值