Pyspark:根据其他数据框动态更新数据框的列位置

Pyspark: Dynamically update columns position of a dataframe according to other dataframe

我有经常更改列位置的要求。我没有更改代码,而是创建了一个临时数据框 Index_df。在这里我将更新列位置,它应该反映更改应该执行的实际数据框。

sample_df

F_cDc,F_NHY,F_XUI,F_NMY,P_cDc,P_NHY,P_XUI,P_NMY
415    258   854   245   478   278   874   235
405    197   234   456   567   188   108   267
315    458   054   375   898   978   677   134

Index_df

   col   position
    F_cDc,1 
    F_NHY,3
    F_XUI,5
    F_NMY,7
    P_cDc,2 
    P_NHY,4
    P_XUI,6
    P_NMY,8

这里根据index_df,sample_df应该改.

预期输出:

F_cDc,P_cDc,F_NHY,P_NHY,F_XUI,P_XUI,F_NMY,P_NMY
415    478   258   278   854   874   245   235
405    567   197   188   234   108   456   267
315    898   458   978   054   677   375   134

此处的列位置根据我在Index_df

中更新的位置进行了更改

我可以 sample_df.select("<column order>") 但我有 70 多列。从技术上讲,这不是最好的交易方式。

您可以使用 select 轻松实现。

首先,您以正确的顺序检索列:

NewColList = Index_df.orderBy("position").select("col").collect()

然后您将新订单应用到您的 df

sample_df = sample_df.select(*[i[0] for i in NewColList])