我有一个PySpark Dataframe ,列顺序如下。我需要按照“分支”对它进行排序。我该怎么做?df.select(sorted(df.columns))
似乎没有按照我想要的方式工作。
现有列顺序:
store_id,
store_name,
month_1_branch_A_profit,
month_1_branch_B_profit,
month_1_branch_C_profit,
month_1_branch_D_profit,
month_2_branch_A_profit,
month_2_branch_B_profit,
month_2_branch_C_profit,
month_2_branch_D_profit,
.
.
month_12_branch_A_profit,
month_12_branch_B_profit,
month_12_branch_C_profit,
month_12_branch_D_profit
所需的列顺序:
store_id,
store_name,
month_1_branch_A_profit,
month_2_branch_A_profit,
month_3_branch_A_profit,
month_4_branch_A_profit,
.
.
month_12_branch_A_profit,
month_1_branch_B_profit,
month_2_branch_B_profit,
month_3_branch_B_profit,
.
.
month_12_branch_B_profit,
..
2条答案
按热度按时间hfsqlsce1#
您可以手动构建列列表。
或者,我建议构建一个更好的数据框架,利用数组+结构/Map数据类型。
这样,数组就已经被“排序”了。Map顺序并不重要,它使得特定于某些月份和分支的SQL查询更容易阅读(使用 predicate 下推可能更快)
wbgh16ku2#
您可能需要使用一些python编码。在下面的脚本中,我根据下划线
_
拆分列名,然后根据元素[3]
(分支名称)和[1]
(月份值)进行排序。输入df:
脚本: