Apache spark 如何创建基于多个字段链接行的ID
我需要根据其他两个字段中的信息创建组ID。具有相同值的所有ID_1必须具有唯一的组ID,同样,具有相同值的所有ID_2必须具有唯一的组ID。组ID不必是连续的Apache spark 如何创建基于多个字段链接行的ID,apache-spark,apache-spark-sql,pyspark-sql,Apache Spark,Apache Spark Sql,Pyspark Sql,我需要根据其他两个字段中的信息创建组ID。具有相同值的所有ID_1必须具有唯一的组ID,同样,具有相同值的所有ID_2必须具有唯一的组ID。组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
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.
为什么第11行和第12行应该有5个作为组ID?因为否则,ID_2中的所有300个和ID_1中的C1不会有相同的组ID。您应该查找连接组件算法。我不确定是否有一个简单的sql查询来实现这一点。