Как создать столбец идентификатора строки в Spark dataframe для каждого отдельного значения столбца с помощью Scala
У меня есть кадр данных в scala spark, поскольку
категория | оценка |
A | 0.2
A | 0,3
A | 0,3
B | 0.9
B | 0.8
B | 1
Я хотел бы добавить столбец столбца строки как
категория | оценка | строка-идентификатор
A | 0,2 | 0
A | 0,3 | 1
A | 0,3 | 2
B | 0,9 | 0
B | 0,8 | 1
B | 1 | 2
В принципе, я хочу, чтобы идентификатор строки монотонно увеличивался для каждого отдельного значения в категории столбцов. У меня уже есть отсортированный dataframe, поэтому все строки с одинаковой категорией группируются вместе. Тем не менее, я до сих пор не знаю, как создать row_id, который перезагружается при появлении новой категории. Пожалуйста помоги!
Это хороший прецедент для функций агрегации Window
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.row_number
import df.sparkSession.implicits._
val window = Window.partitionBy('category).orderBy('score)
df.withColumn("row-id", row_number.over(window))
Функции окна работают как groupBy
за исключением того, что вместо каждой группы, возвращающей одно значение, каждая строка в каждой группе возвращает одно значение. В этом случае значение представляет собой позицию строки в группе строк одной и той же категории. Кроме того, если это тот эффект, который вы пытаетесь достичь, вам не нужно предварительно предварительно отсортировать category
столбца.
- Вопросы
- Azure-data-factory
- Как создать столбец идентификатора строки в Spark dataframe для каждого отдельного значения столбца с помощью Scala