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 社区!
我在弄清楚这个问题时遇到了一些问题
这是一个简单的例子:
+---+----+-----+
| 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 社区!