如何在不列出所有列名的情况下仅重新排列 Pyspark Dataframe 的某些列?

How to re-arrange only certain columns of a Pyspark Dataframe without listing out all the column names?

我有一个包含 100 列的 Pyspark Dataframe(下面仅显示 5 列用于解释):

我只需要重新排列大约30个特定列的索引,其余的保持原样。 具体列需要排列的顺序(即索引)在Exceltable中列出如下(下面只显示3个来说明):

现在,我本可以使用 df = df.select('C', 'E', 'B',...and so on)

但是按照上面的正确顺序写下所有 100 个列名变得太乏味了。

那么有什么有效的方法可以通过简单地从 table 中读取序列作为列表并将其用作参考来执行此操作列的排列?

为了清楚起见,如果只有这 5 列,其中 3 列必须重新排列,那么输出将如下所示:

注意:我使用的是 Python 2.7.5 和 Spark 2.4.0

您可以使用 属性 df.columns(这是一个 python 列表)访问所有列,并在列表理解中简单地使用它:

# assuming you can create the object sequence from the excel
sequence = ["C", "E", "B"]

df = df.select(sequence + [col for col in df.columns if col not in sequence])

df
> DataFrame[C: string, E: string, B: string, A: string, D: string]