【发布时间】:2021-08-12 02:42:46
【问题描述】:
我想为数据框中的列分配一个自动增量唯一 ID。
如果 column1 值与 column2 值匹配,则标志将启用为 true,并且对于所有这些匹配,我们需要分配相同的 ID。如果 column1 值与 column2 值不匹配,则标志将为 False,我们需要为该 column1 值提供唯一 ID。
输入df
| ID | Column1 | Column2 | flag |
|---|---|---|---|
| null | 1 | 2 | True |
| null | 1 | 3 | True |
| null | 2 | 1 | True |
| null | 2 | 3 | True |
| null | 3 | 1 | True |
| null | 3 | 2 | True |
| null | 4 | False | |
| null | 5 | False | |
| null | 6 | 7 | True |
| null | 7 | 6 | True |
| null | 9 | 2 | True |
| null | 1 | 9 | True |
| null | 3 | 9 | True |
| null | 2 | 9 | True |
| null | 8 | False |
输出df
这里 column1 的值 1,2,3 和 9 形成匹配,因此我们为所有这 4 个值 (101) 分配一个唯一 ID,column1 值 4 不匹配,因此我们分配下一个唯一 ID(102),column1值 5 也不匹配,因此我们分配下一个唯一 ID(103),column1 值 6 和 7 是匹配的,因此我们为 2 个值(104)分配相同的唯一 ID,column1 值 8 与任何 column2 值都不匹配,所以我们分配下一个唯一 ID 105
| ID | Column1 |
|---|---|
| 101 | 1 |
| 101 | 2 |
| 101 | 3 |
| 102 | 4 |
| 103 | 5 |
| 104 | 6 |
| 104 | 7 |
| 101 | 9 |
| 105 | 8 |
【问题讨论】:
-
如果我理解正确,对于
col1中的每个唯一值,您需要检查col2中是否存在该值,如果存在则flag为True,否则flag为错误的?如何将 1、2、3、9 或 6、7 组合在一起? -
嗨@pltc,是的 col1 值在输出 df 中是唯一的。在输入中,每个 col1 值都映射到 col2 值,它表示这两个值共享一个唯一 ID。在第一行中,第 1 行映射到 2,因此 1 和 2 形成一对,并且将具有相同的 ID(101) 分配给两者。在第 2 行,1 再次映射到 3,因此现在 3 也与 1 和 2 共享相同的 ID(101)。在第 3 行,2 与 1 映射,我们已经确定了这对的唯一 ID。它继续......并且在第 11 行中,col1 的第 9 行映射到 col2 的第 2 行,因此 9 也应该与 1,2 和 3 共享相同的 ID(101)。
标签: apache-spark pyspark apache-spark-sql