Pyspark 按顺序排列的列值

Pyspark 按顺序排列的列值,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有以下数据帧: Ref ° | indice_1 | Indice_2 | rank_1 | rank_2 | echelon_from | section_from | echelon_to | section_to ----------------------------------------------------------------------------------------------------

我有以下数据帧:

Ref °     | indice_1 | Indice_2      | rank_1    |   rank_2   |  echelon_from     |    section_from      |      echelon_to    |  section_to 
--------------------------------------------------------------------------------------------------------------------------------------------
70574931  |   19     |   37.1        |  32       |    62      |  ["10032,20032"]  |   ["11/12","13"]     |      ["40062"]     |   ["14A"]
---------------------------------------------------------------------------------------------------------------------------------------------
70574931  |   18     |   36          |  32       |    62      |     ["20032"]     |      ["13"]          |    ["30062,40062"] |  ["14,14A"]
我希望连接具有相同参考号的行,将值中的梯形图、值中的截面图、值中的梯形图、值中的截面图和值中的截面图连接到具有重复值的值,如下面的示例所示,并且不接触其余列

Ref °     | Indice_1 | Indice_2      | rank_1    |   rank_2   |  echelon_from     |    section_from      |      echelon_to    |  section_to  
---------------------------------------------------------------------------------------------------------------------------------------------
70574931  |   19     |   37.1        |  32       |    62      |  ["10032,20032"]  |   ["11/12","13"]     |     ["30062,40062"] |  ["14,14A"]
----------------------------------------------------------------------------------------------------------------------------------------------
70574931  |   18     |   36          |  32       |    62      |  ["10032,20032"]  |   ["11/12","13"]     |    ["30062,40062"] |  ["14,14A"]
原始数据帧中的某些列值是重复的,我不应该触摸它们,我应该保留这些值以保持数据帧的相同行号。 有人能帮我吗?我怎么做


谢谢大家!

有多种方法可以做到这一点。一种方法是分解所有给定的列表,并将它们作为一个集合重新收集

从pyspark.sql导入函数为F
列出“从梯队到”concat=[“从梯队”、“从节队”、“从梯队到”、“从节队到”]
columns_not_to_concat=[c代表df中的c.columns如果c不在列表中_to_concat]
对于列表中的c到c:
df=带柱的df(c,F.分解(c))
df=(
df
.groupBy(*列不到列)
阿格先生(
*[F.collect\u set(c).列表中c的别名(c)\u-concat]
)
)
另一种更优雅的方法是使用
flant()

从pyspark.sql导入函数为F
列出“从梯队到”concat=[“从梯队”、“从节队”、“从梯队到”、“从节队到”]
对于列表中的c到c:
df=带柱的df(c,F.展平(c))
参考资料:
有多种方法可以做到这一点。一种方法是分解所有给定的列表,并将它们作为一个集合重新收集

从pyspark.sql导入函数为F
列出“从梯队到”concat=[“从梯队”、“从节队”、“从梯队到”、“从节队到”]
columns_not_to_concat=[c代表df中的c.columns如果c不在列表中_to_concat]
对于列表中的c到c:
df=带柱的df(c,F.分解(c))
df=(
df
.groupBy(*列不到列)
阿格先生(
*[F.collect\u set(c).列表中c的别名(c)\u-concat]
)
)
另一种更优雅的方法是使用
flant()

从pyspark.sql导入函数为F
列出“从梯队到”concat=[“从梯队”、“从节队”、“从梯队到”、“从节队到”]
对于列表中的c到c:
df=带柱的df(c,F.展平(c))
参考资料:

@Ben.T Ref.,indicate_1,indicate_2,rank_1和rank_2是字符串梯队从,Section_from,Echelon_to和Section_to是@Ben.T Ref.的阵列可能副本,indicate_1,indicate_2,rank_1和rank_2是字符串梯队从,Section_from,electron_to和Section_to是我更新了答案的阵列可能副本。之前的一个不起作用,因为我在一个
.select()
语句中分解了多个列。以上应该有效。我已经更新了答案。之前的一个不起作用,因为我在一个
.select()
语句中分解了多个列。上面的方法应该有效。