如何解决pyspark:重复项的删除量大于值
我下面有一个数据框:
我想根据流程和工位显示以下行
解决方法
尝试使用 split
并获取代码值,然后使用expr
过滤记录。
Example:
df.show()
#+------+-------+-------+--------+
#| code|process|station|sequence|
#+------+-------+-------+--------+
#|CODE-1| ab| ab| 1|
#|CODE-1| ab| xy| 2|
#|CODE-1| ab| op| 3|
#|CODE-1| ab| ac| 4|
#|CODE-2| xy| ab| 1|
#|CODE-2| xy| xy| 2|
#|CODE-2| xy| op| 3|
#|CODE-2| xy| ac| 4|
#|CODE-3| op| ab| 1|
#|CODE-3| op| xy| 2|
#|CODE-3| op| op| 3|
#|CODE-3| op| ac| 4|
#|CODE-4| ac| ab| 1|
#|CODE-4| ac| xy| 2|
#|CODE-4| ac| op| 3|
#|CODE-4| ac| ac| 4|
#+------+-------+-------+--------+
from pyspark.sql.functions import *
df.withColumn("tmp",split(col("code"),"-")[1]).\
filter(expr('sequence >= tmp')).\
drop(*["tmp"]).\
show()
#+------+-------+-------+--------+
#| code|process|station|sequence|
#+------+-------+-------+--------+
#|CODE-1| ab| ab| 1|
#|CODE-1| ab| xy| 2|
#|CODE-1| ab| op| 3|
#|CODE-1| ab| ac| 4|
#|CODE-2| xy| xy| 2|
#|CODE-2| xy| op| 3|
#|CODE-2| xy| ac| 4|
#|CODE-3| op| op| 3|
#|CODE-3| op| ac| 4|
#|CODE-4| ac| ac| 4|
#+------+-------+-------+--------+
Option-2:
使用 df.replace()
,然后使用expr
进行过滤。
replace_dict={"ab":"1","xy":"2","op":"3","ac":"4"}
df.withColumn("tmp",col("process")).\
replace(replace_dict,subset='tmp').\
filter(expr('sequence >= tmp')).\
drop(*["tmp"]).\
show()
#+------+-------+-------+--------+
#| code|process|station|sequence|
#+------+-------+-------+--------+
#|CODE-1| ab| ab| 1|
#|CODE-1| ab| xy| 2|
#|CODE-1| ab| op| 3|
#|CODE-1| ab| ac| 4|
#|CODE-2| xy| xy| 2|
#|CODE-2| xy| op| 3|
#|CODE-2| xy| ac| 4|
#|CODE-3| op| op| 3|
#|CODE-3| op| ac| 4|
#|CODE-4| ac| ac| 4|
#+------+-------+-------+--------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。