在 PySpark 中重新排列列

Rearranging columns in PySpark

我有一个包含很多列的 DataFrame。现在我想调整列的顺序。
许多列必须排在第一位(按一定顺序),其余列按列名排序(不是手动,因为有很多)

如何使用 PySpark 实现此目的?

我想先对它们进行排序,然后再按特定顺序调整一些

df.orderBy(cols, ascending=True)

假定当前列顺序:

col_a, col_k, col_c, col_h, col_e, col_f, col_g, col_d, col_j, col_i, col_b

需要的新订单:

col_c, col_j, col_a, col_g :: col_b, col_d, col_e, col_f, col_h, col_i, col_k

之前 :: 是按特定顺序排列的列,之后是按列名排序的剩余列

您可以 select 第一个特定列,使用 python sorted 然后 select 在您的 df 中对其余列进行排序:

first_cols = ["col_c", "col_j", "col_a", "col_g"]
other_cols = sorted([c for c in df.columns if c not in first_cols], key=str.lower())

rearanged_cols = first_cols + other_cols

然后:

df = df.toDF(*rearanged_cols)

或者:

df = df.select(*rearanged_cols)