PySpark多条件过滤错误记录:持股规则下的异常数据识别
数据校验与错误标记需求
原始DataFrame
+--------------+---------------+------------------+------------+-----+ |registerNumber|joint_indicator|share_class_number|no_of_shares|mn_id| +--------------+---------------+------------------+------------+-----+ | XXXXXXXX| 1| 1| 000000001|1 | XXXXXXXX| 1| 1| 000000000|2 | XXXXXXXX| 1| 1| 000000001|3 | XXXXXXXX| 1| 1| 000000000|4 | XXXXXXXX| 1| 1| 000000001|5 | XXXXXXXX| 1| 1| 000000000|6 | XXXXXXXX| 1| 1| 000000001|7 | XXXXXXXX| 1| 1| 000000000|8 | XXXXXXXX| | 1| 000000001|9 | XXXXXXXX| 1| 1| 000000000|10 | XXXXXXXX| 1| 1| 000000000|11 | XXXXXXXX| 1| 1| 000000001|12 | XXXXXXXX| 1| 1| 000000000|13 | XXXXXXXX| 1| 1| 000000001|14 | XXXXXXXX| 1| 1| 000000000|15 | YYYYYYYY| 1| 1| 000000001|16 | YYYYYYYY| 1| 1| 000000001|17 | YYYYYYYY| 1| 1| 000000000|18 | YYYYYYYY| 1| 1| 000000001|19 | ZZZZZZZZ| 1| 2| 000000001|20 | ZZZZZZZZ| 1| 2| 000000000|21 | ZZZZZZZZ| 1| 2| 000000000|22 | ZZZZZZZZ| | 2| 000000001|23 +--------------+---------------+------------------+------------+-----+
字段说明与校验规则
registerNumber:代表一组记录joint_indicator:为1表示联合持股,为空表示个人持股- 联合持股基础规则:首条
joint_indicator=1的记录no_of_shares必须大于0,后续同组联合持股记录的no_of_shares必须为0
需识别并标记两类错误记录:
- 当
joint_indicator为空且no_of_shares>0时,下一条joint_indicator有值的记录若no_of_shares=0则为错误 - 联合持股组内,首条记录后出现
no_of_shares>0的记录则为错误
预期输出结果
为错误记录添加error字段标记,并保留对应registerNumber:
+--------------+---------------+------------------+------------+-----+-------+ |registerNumber|joint_indicator|share_class_number|no_of_shares|mn_id|error | +--------------+---------------+------------------+------------+-----+-------+ | XXXXXXXX| 1| 1| 000000001| 1| false| | XXXXXXXX| 1| 1| 000000000| 2| false| | XXXXXXXX| 1| 1| 000000001| 3| false| | XXXXXXXX| 1| 1| 000000000| 4| false| | XXXXXXXX| 1| 1| 000000001| 5| false| | XXXXXXXX| 1| 1| 000000000| 6| false| | XXXXXXXX| 1| 1| 000000001| 7| false| | XXXXXXXX| 1| 1| 000000000| 8| false| | XXXXXXXX| null| 1| 000000001| 9| false| | XXXXXXXX| 1| 1| 000000000| 10| true| | XXXXXXXX| 1| 1| 000000000| 11| false| | XXXXXXXX| 1| 1| 000000001| 12| false| | XXXXXXXX| 1| 1| 000000000| 13| false| | XXXXXXXX| 1| 1| 000000001| 14| false| | XXXXXXXX| 1| 1| 000000000| 15| false| | YYYYYYYY| 1| 1| 000000001| 16| false| | YYYYYYYY| 1| 1| 000000001| 17| true | | ZZZZZZZZ| 1| 2| 000000000| 22| false| | YYYYYYYY| 1| 1| 000000000| 18| false| | YYYYYYYY| 1| 1| 000000001| 19| true | | ZZZZZZZZ| null| 2| 000000001| 23| false| | ZZZZZZZZ| 1| 2| 000000001| 20| false| | ZZZZZZZZ| 1| 2| 000000000| 21| false| +--------------+---------------+------------------+------------+-----+-------+
内容的提问来源于stack exchange,提问作者Muskan Makhija
相关产品推荐
相关产品推荐

