当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark DataFrame where方法用法及代码示例


PySpark DataFrame 的 where(~) 方法返回 DataFrame 中满足给定条件的行。

注意

where(~) 方法是 filter(~) 方法的别名。

参数

1.condition | Columnstring

布尔掩码 (Column) 或 SQL 字符串表达式。

返回值

一个新的 PySpark 数据帧。

例子

考虑以下PySpark DataFrame:

df = spark.createDataFrame([["Alex", 20], ["Bob", 30], ["Cathy", 40]], ["name", "age"])
df.show()



+-----+---+
| name|age|
+-----+---+
| Alex| 20|
|  Bob| 30|
|Cathy| 40|
+-----+---+

基本用法

要获取 age 大于 25 的行:

df.where("age > 25").show()



+-----+---+
| name|age|
+-----+---+
|  Bob| 30|
|Cathy| 40|
+-----+---+

同样,我们可以传递一个表示布尔掩码的 Column 对象:

df.where(df.age > 25).show()



+-----+---+
| name|age|
+-----+---+
|  Bob| 30|
|Cathy| 40|
+-----+---+

同样,我们可以使用sql.functions col(~) 函数来引用该列:

from pyspark.sql import functions as F
df.where(F.col("age") > 25).show()



+-----+---+
| name|age|
+-----+---+
|  Bob| 30|
|Cathy| 40|
+-----+---+

复合查询

where(~) 方法支持 ANDOR 语句,如下所示:

df.where("age > 25 AND name = 'Bob'").show()



+----+---+
|name|age|
+----+---+
| Bob| 30|
+----+---+

处理空值

考虑以下PySpark DataFrame:

df = spark.createDataFrame([["Alex", 20], [None, None], ["Cathy", None]], ["name", "age"])
df.show()



+-----+----+
| name| age|
+-----+----+
| Alex|  20|
| null|null|
|Cathy|null|
+-----+----+

让我们查询 age!=10 的行,如下所示:

df.where("age != 10").show()



+----+---+
|name|age|
+----+---+
|Alex| 20|
+----+---+

请注意,即使其他两行在技术上具有 age!=10 ,也仅返回 Alex 的行。发生这种情况是因为 PySpark 的 where(-) 方法默认过滤我们的空值。

为了防止空值行被过滤掉,我们可以像这样执行查询:

from pyspark.sql import functions as F
df.where((F.col("age") != 10) | (F.col("age").isNull())).show()



+-----+----+
| name| age|
+-----+----+
| Alex|  20|
| null|null|
|Cathy|null|
+-----+----+

请注意,PySpark 对空值的处理与 Pandas 不同,因为 Pandas 将保留缺失值的行,如下所示:

import pandas as pd
df = pd.DataFrame({
 "col": ["a", "b", None]
})
df[df["col"] != "a"]



   col
1  b
2  None

请注意col=None 行没有被遗漏!

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | where method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。