Как создать идентификатор, который связывает строки на основе нескольких полей - PullRequest
0 голосов
/ 12 мая 2018

У меня есть требование создать GROUP_ID на основе информации, представленной в двух других полях.Все ID_1 с одинаковыми значениями должны иметь уникальный Group_ID, а также все ID_2 с одинаковыми значениями должны иметь уникальный Group_ID.Group_ID не обязательно должен быть смежным.

ID_1    ID_2    GROUP_ID  
X1      10      1  
X1      20      1  
Y1      30      2  
Y2      30      2  
A1      100     3  
A1      200     3  
B1      200     3  
B1      200     3  
B1      300     3  
B1      300     3  
C1      300     3  
C1      400     3  

Я использую pyspark, и я попытался решить в Spark SQL с помощью оконных функций (см. Ниже), но не смог получить желаемый результат.Пожалуйста, дайте мне знать, если есть эффективный способ решить эту проблему.В моем наборе данных> 100 миллионов строк.

RowNum  ID_1    ID_2    ID_1_1  ID_2_1  GROUP_ID
1       X1      10      1       1       1
2       X1      20      1       1       1
3       Y1      30      3       3       3
4       Y2      30      4       3       3
5       A1      100     5       5       5
6       A1      200     5       5       5
7       B1      200     7       5       5
8       B1      200     7       5       5
9       B1      300     7       7       5
10      B1      300     7       7       5
11      C1      300     11      7       7
12      C1      400     11      11      7

Where
ID_1_1 = First(ROWNUM) over (Partition by ID_1 order by RowNum)
ID_2_1 = First(ID_1_1) over (Partition by ID_2 order by ID_1_1)
Group_ID = First(ID_2_1) over (Partition by ID_1_1 order by ID_2_1)

Using above approach, Rows 11 and 12 gets a group ID of 7 instead of 5. 
...