scala - 将重置索引添加到火花数据框
问题描述
我有一个数据框,我想根据其中一列添加要重置的索引列
--------------------
| ColA | ColB |
====================
| G1 | 10 |
--------------------
| G1 | 20 |
--------------------
| G2 | 50 |
--------------------
| G2 | 10 |
--------------------
| G2 | 70 |
--------------------
我希望结果是
-----------------------------
| ColA | ColB | ColC |
=============================
| G1 | 10 | 1 |
-----------------------------
| G1 | 20 | 2 |
-----------------------------
| G2 | 50 | 1 | <== reset because ColA changed
-----------------------------
| G2 | 10 | 2 |
-----------------------------
| G2 | 70 | 3 |
-----------------------------
有没有像 df.withColumn("id", monotonicallyIncreasingId) 这样合适的东西?
解决方案
用于Window
为列进行分区colA
。
import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy("ColA").orderBy("ColB")
df.withCloumn("id", row_number.over(w))
或者,如果您想保持原始的行顺序,
import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy("ColA").orderBy("temp")
df.withColumn("temp", monotonically_increasing_id)
.withCloumn("id", row_number.over(w))
.drop("temp")
推荐阅读
- r - For循环将所有非NA观察重命名为R中的列名
- saml - Angular 应用程序中的 AZure AD SAML 响应
- linq - Linq 错误 在前一个操作完成之前在此上下文上启动了第二个操作
- botframework - 机器人模拟器没有产生 ngrok
- javascript - 在编辑功能中按值定位
- python - 使包在 PyCharm 之外可用 (Python3)
- docker - docker 会像虚拟机那样消耗 CPU 吗?
- eclipse - 如何在 cp 或 mv 等自定义 Eclipse 插件中打开终端并运行 shell 命令?
- python - 我将如何使用错误的输出修复此脚本?
- c# - Azure Signalr +Azure 功能 + wpf 客户端 - 如何使用 azure 功能和自托管 Azure SignalR 应用程序拥有 wpf 客户端应用程序