![](/img/trans.png)
[英]How to filter all dataframe columns to an condition in Pyspark?
[英]Pyspark dataframe filter OR condition
我正在嘗試根據 OR 條件過濾我的 pyspark 數據框,如下所示:
filtered_df = file_df.filter(file_df.dst_name == "ntp.obspm.fr").filter(file_df.fw == "4940" | file_df.fw == "4960")
我只想返回 file_df.fw == "4940" OR file_df.fw == "4960" 的行但是當我嘗試這個時,我得到這個錯誤:
Py4JError: An error occurred while calling o157.or. Trace:
py4j.Py4JException: Method or([class java.lang.String]) does not exist
我究竟做錯了什么?
如果沒有 OR 條件,當我嘗試僅在一種條件下進行過濾時它會起作用( file_df.fw=="4940"
)
錯誤消息是由操作員的不同優先級引起的。 的|
(OR) 作為比較運算符==
具有更高的優先級。 Spark 嘗試將 OR 應用於
"4940"
和file_df.fw
而不是你想要的(file_df.fw == "4940")
和(file_df.fw == "4960")
。 您可以使用括號更改優先級。 看看下面的例子:
columns = ['dst_name','fw']
file_df=spark.createDataFrame([('ntp.obspm.fr','3000'),
('ntp.obspm.fr','4940'),
('ntp.obspm.fr','4960'),
('ntp.obspm.de', '4940' )],
columns)
#here I have added the brackets
filtered_df = file_df.filter(file_df.dst_name == "ntp.obspm.fr").filter((file_df.fw == "4940") | (file_df.fw == "4960"))
filtered_df.show()
輸出:
+------------+----+
| dst_name| fw|
+------------+----+
|ntp.obspm.fr|4940|
|ntp.obspm.fr|4960|
+------------+----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.