我有一个 Dataframe ,如下所示df:
id vehicle production asIs EU EU_variant status
1 A3345 PQ1298 FV1 FV1_variant OK
2 A3346 A3346 PQ1287 FV2 FV2_variant NOT_OK
3 A3346 A3346 PQ1207 FV2 FV2_variant NOT_OK
4 A3347 QP9 QP9_variant OK
5 A3347 QP9 QP9_variant NOT_OK
6 A3347 QP3 QP3_variant OK
7 A3348 MP6553 YR34 YR34_variant NOT_OK
8 A3348 MP6554 YR35 YR35_variant NOT_OK
9 A3348 MP6554 YR35 YR35_variant NOT_OK
对于每个不同的车辆和不同的EU,我需要创建2列“标志”和“零件”,其中如果它的状态既有正常状态又有不正常状态,则标志将为0,否则如果它只有不正常状态,则标志将为1。对于每个不同的车辆和不同的EU,我需要将asIs合并,而不重复。如果车辆编号不存在,则应检查不同的生产和不同的EU
输出应
id vehicle production asIs EU EU_variant status Flag Part
1 A3345 PQ1298 FV1 FV1_variant OK 0 PQ1298
2 A3346 A3346 PQ1287 FV2 FV2_variant NOT_OK 1 PQ1287,PQ1207
3 A3346 A3346 PQ1207 FV2 FV2_variant NOT_OK 1 PQ1287,PQ1207
4 A3347 QP9 QP9_variant OK 0
5 A3347 QP9 QP9_variant NOT_OK 0
6 A3347 QP3 QP3_variant OK 0
7 A3348 MP6553 YR34 YR34_variant NOT_OK 1 MP6553
8 - A3348 MP6554 YR35 YR35_variant NOT_OK 1 MP6554
9 A3348 MP6554 YR35 YR35_variant NOT_OK 1 MP6554
如何使用pyspark dataframe实现此场景
1条答案
按热度按时间zbq4xfa01#
您可以在
status
字段上使用collect_set
来获取所需分区的不同状态。使用结果来标记记录。collect_set
返回一个数组字段,可用于检查长度(使用size
)及其内容(使用array_contains
)。参见下面示例