Apache spark PySpark窗口结束:有没有更好的方法来查找两列分区的行号

Apache spark PySpark窗口结束:有没有更好的方法来查找两列分区的行号,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我有一个包含3列(T、S和a)的数据集。我需要过滤掉记录,这样T和S列就有了一对一的匹配 e、 g.如果T1与S1匹配,则应过滤带有S1值的T2行 我可以使用2次窗口切换来实现它,但是在第二个窗口功能期间,它会在集群中执行大量的随机操作(第一个窗口随机操作我可以用df.sort/repartition控制) 它给出了下面的结果,所以如果r1==r2,我可以过滤记录并获得预期的输出 +---+---+---+---+---+

我有一个包含3列(T、S和a)的数据集。我需要过滤掉记录,这样T和S列就有了一对一的匹配

e、 g.如果T1与S1匹配,则应过滤带有S1值的T2行

我可以使用2次窗口切换来实现它,但是在第二个窗口功能期间,它会在集群中执行大量的随机操作(第一个窗口随机操作我可以用df.sort/repartition控制)

它给出了下面的结果,所以如果r1==r2,我可以过滤记录并获得预期的输出

+---+---+---+---+---+                                                           
|  T|  S|  A| r1| r2|
+---+---+---+---+---+
| T1| S2| 10|  2|  1|
| T2| S2| 10|  2|  2|
| T1| S1| 10|  1|  1|
| T2| S1| 10|  1|  2|
+---+---+---+---+---+
预期结果

+---+---+---+---+---+                                                           
|  T|  S|  A| r1| r2|
+---+---+---+---+---+
| T2| S2| 10|  2|  2|
| T1| S1| 10|  1|  1|
+---+---+---+---+---+

你能在这里详细介绍一下规则吗?如果T1与S1匹配,则删除T2与S1。T1和S2如何,允许匹配吗?(如果是这样的话,T2和S2优先吗?)?同一个S可以与多个T匹配吗?Hi@Shaido,T不能与多个S匹配。从优先级来看,任何匹配都可以。我的意思是T1-S1,T2-S2或T1-S2,T2-S1可以匹配。规则是一个T应该和一个S匹配,反之亦然,一个S对一个T。不,我不需要
r1
r2
列。这些只是为了识别一对一的匹配。@smitensha您的方法似乎假设,如果您有N个Tx,那么您也将有N个Sy和N*N行来拥有所有对(Tx,Sy)。想知道如果你删除了T2行和S1行,那么你的方法将不会保留T2行和S2行,因为它是唯一的匹配?谢谢@Ben.T,是的,我得到了,但我有一个巨大的数据集(约5000万条记录),收集列将占用大量资源。感谢您的回复。
+---+---+---+---+---+                                                           
|  T|  S|  A| r1| r2|
+---+---+---+---+---+
| T2| S2| 10|  2|  2|
| T1| S1| 10|  1|  1|
+---+---+---+---+---+