在 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)
我有一个包含很多列的 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)