pyspark:重复项的删除量大于值

问题描述

我下面有一个数据框:

enter image description here

我想根据流程和工位显示以下行

enter image description here

解决方法

尝试使用 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|
#+------+-------+-------+--------+