开始使用免费开始使用

筛选数据

既然您已经掌握了一些 SQL 基础,就更容易理解在 Spark DataFrame 中的对应操作了。

来看一下 .filter() 方法。正如您所料,它对应 SQL 的 WHERE 子句。.filter() 可以接收两种参数:一种是作为字符串传入、可写在 SQL 表达式 WHERE 子句后的表达式;另一种是 Spark 的布尔列(True/False)。

例如,下面两种写法会得到相同的结果:

flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()

注意,第一种情况下,我们向 .filter() 传入的是一个「字符串」。如果用 SQL 来写,这个筛选任务就是 SELECT * FROM flights WHERE air_time > 120。只要以字符串形式传入,Spark 的 .filter() 就能接受任何可以放在 SQL 查询 WHERE 子句中的表达式(在这里是 "air_time > 120")。同时请注意,这个字符串里不需要写表名——就像在 SQL 的 WHERE 子句中一样。

第二种情况下,我们向 .filter() 传入的是一个「布尔值列」。请记住,flights.air_time > 120 会返回一列布尔值,其中 flights.air_time 大于 120 的记录位置为 True,否则为 False

请记住,您的工作区中已经有一个名为 sparkSparkSession,以及一个 Spark DataFrame flights

本练习是课程的一部分

PySpark 基础

查看课程

练习说明

  • 使用 .filter() 以两种方式找出飞行距离超过 1000 英里的航班:
    • 先向 .filter() 传入一个 SQL「字符串」,判断距离是否大于 1000。将结果保存为 long_flights1
    • 然后向 .filter() 传入一个布尔列,完成相同判断。将结果保存为 long_flights2
  • 使用 .show() 打印两个 DataFrame 的前几行,确认它们确实相同!

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Filter flights by passing a string
long_flights1 = ____.____("____ > ____")

# Filter flights by passing a column of boolean values
long_flights2 = ____.____(____.____ > ____)

# Print the data to check they're equal
____.____()
____.____()
编辑并运行代码