Вы можете использовать row_number () с Оконным управлением функциями.
Первый импорт Окно и row_number ,
from pyspark.sql import Window
from pyspark.sql.functions import row_number()
Предположим, ваш сценарий со следующими столбцами и значениями
>>> cols1 = ['code', 'emp']
>>> vals1 = [
('a', 14),
('a', 22),
('a', 35),
('a', 64),
('b', 12),
('b', 35)
]
# Create a DataFrame
>>> df1 = spark.createDataFrame(vals1, cols1)
# Result of 'df1' table.
>>> df1.show()
+----+---+
|code|emp|
+----+---+
| a| 14|
| a| 22|
| a| 35|
| a| 64|
| b| 12|
| b| 35|
+----+---+
Применить, row_number () над столбцом code
.
>>> val = df1.withColumn("value", row_number().over(Window.partitionBy("code").orderBy("emp")))
>>> val.show()
+----+---+-----+
|code|emp|value|
+----+---+-----+
| b| 12| 1|
| b| 35| 2|
| a| 14| 1|
| a| 22| 2|
| a| 35| 3|
| a| 64| 4|
+----+---+-----+
Наконец, выполните заказ по столбцу code
, чтобы получить желаемый результат.
>>> val.orderBy('code').show()
+----+---+-----+
|code|emp|value|
+----+---+-----+
| a| 14| 1|
| a| 22| 2|
| a| 35| 3|
| a| 64| 4|
| b| 12| 1|
| b| 35| 2|
+----+---+-----+
- partitionBy : создает WindowSpec с определенным разделением.
Для получения дополнительной информации см .: