首页 > 解决方案 > 使用 pyspark 以交替的男性女性格式显示表格的性别

问题描述

所以我有这张表,我试图对它进行排序,使“性别”列的值是交替的。下面是有问题的表格

+--------------------+------+---+
|       Employee_Name|salary|Sex|
+--------------------+------+---+
| Adinolfi, Wilson  K| 62506| M |
|Ait Sidi, Karthik...|104437| M |
|   Akinkuolie, Sarah| 64955|  F|
|        Alagbe,Trina| 64991|  F|
|    Anderson, Carol | 50825|  F|
|   Anderson, Linda  | 57568|  F|
|     Andreola, Colby| 95660|  F|
|         Athwal, Sam| 59365| M |
|    Bachiochi, Linda| 47837|  F|
|  Bacong, Alejandro | 50178| M |
|Baczenski, Rachael  | 54670|  F|
|     Barbara, Thomas| 47211| M |
|    Barbossa, Hector| 92328| M |
|Barone, Francesco  A| 58709| M |
|       Barton, Nader| 52505| M |
|       Bates, Norman| 57834| M |
|    Beak, Kimberly  | 70131|  F|
| Beatrice, Courtney | 59026|  F|
|       Becker, Renee|110000|  F|
|       Becker, Scott| 53250| M |
+--------------------+------+---+

向我提出的问题是写一个这样的声明:

+---+-------+
|sex|EMpName|
+---+-------+
| M |Kevin  |
| F |Carol  | 
| M |Josh   |
| F |Linda  |
| M |Sam    |
| F |Sam    |
+---+-------+

请帮助,任何提示或概念将不胜感激。

标签: apache-sparkpyspark

解决方案


您需要添加一个“订单”列才能获得预期的结果。这是一个解决方案row_number

from pyspark.sql import functions as F, Window

# assuming df is your dataframe

df.withColumn(
    "ordering",
    F.row_number().over(Window.partitionBy("sex").orderBy(F.lit(1))),
).orderBy("ordering", "sex").drop("ordering").show()

推荐阅读