當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。