我试图根据像这样的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”或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|
+------------+----+
关于python - Pyspark数据框过滤器或条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55632794/