PySpark Dataframe:统一某些行

PySpark Dataframe: Unify Certain Rows

我在弄清楚这个问题时遇到了一些问题

这是一个简单的例子:

+---+----+-----+
| Id|Rank|State+
+---+----+-----+
|  a|   5|  NJ +
|  a|   7|  GA +
|  b|   8|  CA +
|  b|   1|  CA +
+---+----+-----+

我想格式化此数据框,如果同一个 ID 处于多个状态,则只存储一个状态。在此示例中,Id 为 "a" 的任何行都应具有状态 "NJ" 而不是 "NJ" 和 "GA"。

结果应该是这样的:

+---+----+-----+
| Id|Rank|State+
+---+----+-----+
|  a|   5|  NJ +
|  a|   7|  NJ +
|  b|   8|  CA +
|  b|   1|  CA +
+---+----+-----+`

如何实现?谢谢!!

尝试 first 窗口函数,例如:

w = Window().partitionBy("Id").orderBy("Rank")
df.select(col("Id"), col("Rank"), first("State", True).over(w).alias("NewState"))

这将根据 id 组内的排名将第一个状态放入 "NewState" 列。
同样的东西可以很容易地用纯SQL来表达,如果你想用

顺便说一句,欢迎来到 Whosebug 社区!