如何根据列表按特定顺序对 pyspark 中的列进行排序?
How to order columns in pyspark in a specific sequence based on a list?
我在 Spark 中有一个数据框,看起来像这样(但有更多行),其中每个城市都有我网站上的访问者数量。
| date | New York | Los Angeles | Tokyo | London | Berlin | Paris |
|:----------- |:--------:| -----------:|------:|-------:|-------:|------:|
| 2022-01-01 | 150000 | 1589200 | 500120| 120330 |95058331|980000 |
我想根据这个城市列表对列进行排序(它们是根据对我的重要性排序的)
order = ["Paris", "Berlin", "London", "New York", "Los Angeles", "Tokyo"]
最后,我需要一个像这样的数据框。有什么方法可以创建一个函数来在我需要时执行此排序吗?预期结果如下:
| date | Paris | Berlin | London | New York | Los Angeles | Tokyo |
|:----------- |:--------:| -------:|-------:|---------:|------------:|------:|
| 2022-01-01 | 980000 | 95058331| 120330 | 150000 | 1589200 | 500120|
谢谢!
你从丢弃发射的开始发射点开始订购
你的例子:
df_exemple = spark.createDataFrame(
[
('2022-01-01','150000 ','1589200','500120','120330','95058331','980000')
], ['date', 'New York', 'Los Angeles', 'Tokyo', 'London', 'Berlin', 'Paris'])
order = ['Paris', 'Berlin', 'London', 'New York', 'Los Angeles', 'Tokyo']
现在,一个重新排序的简单函数:
def order_func(df, order_list):
return df.select('date', *order_list)
result_df = order_func(df_exemple, order)
result_df.show()
+----------+------+--------+------+--------+-----------+------+
| date| Paris| Berlin|London|New York|Los Angeles| Tokyo|
+----------+------+--------+------+--------+-----------+------+
|2022-01-01|980000|95058331|120330| 150000 | 1589200|500120|
+----------+------+--------+------+--------+-----------+------+
尝试 select 使用列表。在这种情况下,在列表的开头插入日期
order[0:0] =['date']
df_exemple.select(order).show()
+----------+------+--------+------+--------+-----------+------+
| date| Paris| Berlin|London|New York|Los Angeles| Tokyo|
+----------+------+--------+------+--------+-----------+------+
|2022-01-01|980000|95058331|120330| 150000 | 1589200|500120|
+----------+------+--------+------+--------+-----------+------+
我在 Spark 中有一个数据框,看起来像这样(但有更多行),其中每个城市都有我网站上的访问者数量。
| date | New York | Los Angeles | Tokyo | London | Berlin | Paris |
|:----------- |:--------:| -----------:|------:|-------:|-------:|------:|
| 2022-01-01 | 150000 | 1589200 | 500120| 120330 |95058331|980000 |
我想根据这个城市列表对列进行排序(它们是根据对我的重要性排序的)
order = ["Paris", "Berlin", "London", "New York", "Los Angeles", "Tokyo"]
最后,我需要一个像这样的数据框。有什么方法可以创建一个函数来在我需要时执行此排序吗?预期结果如下:
| date | Paris | Berlin | London | New York | Los Angeles | Tokyo |
|:----------- |:--------:| -------:|-------:|---------:|------------:|------:|
| 2022-01-01 | 980000 | 95058331| 120330 | 150000 | 1589200 | 500120|
谢谢!
你从丢弃发射的开始发射点开始订购
你的例子:
df_exemple = spark.createDataFrame(
[
('2022-01-01','150000 ','1589200','500120','120330','95058331','980000')
], ['date', 'New York', 'Los Angeles', 'Tokyo', 'London', 'Berlin', 'Paris'])
order = ['Paris', 'Berlin', 'London', 'New York', 'Los Angeles', 'Tokyo']
现在,一个重新排序的简单函数:
def order_func(df, order_list):
return df.select('date', *order_list)
result_df = order_func(df_exemple, order)
result_df.show()
+----------+------+--------+------+--------+-----------+------+
| date| Paris| Berlin|London|New York|Los Angeles| Tokyo|
+----------+------+--------+------+--------+-----------+------+
|2022-01-01|980000|95058331|120330| 150000 | 1589200|500120|
+----------+------+--------+------+--------+-----------+------+
尝试 select 使用列表。在这种情况下,在列表的开头插入日期
order[0:0] =['date']
df_exemple.select(order).show()
+----------+------+--------+------+--------+-----------+------+
| date| Paris| Berlin|London|New York|Los Angeles| Tokyo|
+----------+------+--------+------+--------+-----------+------+
|2022-01-01|980000|95058331|120330| 150000 | 1589200|500120|
+----------+------+--------+------+--------+-----------+------+