如何在PySpark中实现不等值过滤,替代Pandas的不等值筛选写法
PySpark不等值过滤的正确实现
报错原因
你写的df= df[df.select(ColumnA > df.select(ColumnA)]存在两处核心错误:
select方法是用来选择列的,不能直接嵌套在过滤条件的表达式里- 列引用格式错误,且条件逻辑完全不匹配你要实现的Pandas等价逻辑
对应Pandas逻辑的PySpark实现
1. 筛选ColumnA大于ColumnB的行
对应Pandas代码df= df[df.ColumnA > df.ColumnB],PySpark有三种等价写法:
# 写法1:类似Pandas的方括号语法 df = df[df.ColumnA > df.ColumnB] # 写法2:用filter方法+列对象引用 df = df.filter(df.ColumnA > df.ColumnB) # 写法3:用where方法(和filter完全等价,只是别名) df = df.where(df.ColumnA > df.ColumnB)
2. 筛选ColumnA大于0且小于等于6的行
对应Pandas代码df=df[(df['ColumnA']<=6)&(df['ColumnA']>0)],PySpark等价写法:
# 写法1:方括号语法,多条件用&连接,每个条件必须加括号 df = df[(df['ColumnA'] <=6) & (df['ColumnA'] >0)] # 写法2:filter方法 df = df.filter( (df.ColumnA <=6) & (df.ColumnA >0) ) # 写法3:直接写SQL表达式字符串,更简洁 df = df.filter("ColumnA >0 AND ColumnA <=6")
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

