目录
使用 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 工具,您都能够快速可视化您的数据。