Python 火花拼花地板组内分配索引
我想知道生成列Python 火花拼花地板组内分配索引,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我想知道生成列索引的最有效方法 要在每组标签中唯一标识记录: +-------+-------+-------+ | label | value | index | +-------+-------+-------+ | a | v1 | 0 | +-------+-------+-------+ | a | v2 | 1 | +-------+-------+-------+ | a | v3 | 2 | +-------+--
索引的最有效方法
要在每组标签中唯一标识记录:
+-------+-------+-------+
| label | value | index |
+-------+-------+-------+
| a | v1 | 0 |
+-------+-------+-------+
| a | v2 | 1 |
+-------+-------+-------+
| a | v3 | 2 |
+-------+-------+-------+
| a | v4 | 3 |
+-------+-------+-------+
| b | v5 | 0 |
+-------+-------+-------+
| b | v6 | 1 |
+-------+-------+-------+
我的实际数据非常大,每组标签都有相同数量的记录。列索引将用于透视。
我可以做通常的排序+for循环增量+检查curpre,然后重置索引,等等,但是一种更快更有效的方法总是受欢迎的
编辑:从建议的问题中得到了我的答案:
from pyspark.sql import Row, functions as F
from pyspark.sql.window import Window
df = df.withColumn("index",
F.row_number().over(
Window.partitionBy("label").orderBy("value"))
)
谢谢你的帮助 在对标签
列进行分区时,可以使用窗口
函数创建基于排名的列。但是,这需要排序-在本例中,在值上
:
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number
window = Window.partitionBy(df['label']).orderBy(df['value'])
df.withColumn('index', row_number().over(window))
这将给出一个新列索引
,其值从1开始(要从0开始,只需将-1
添加到上述表达式中)。值将按值列的顺序给出。rank()将在值s相同时出现问题,最好使用行数()
@jxc,这是一个很好的观点。我更新了答案。