Создание номера строки каждой строки в PySpark DataFrame с помощью функции row_number () с Spark версии 2.2 - PullRequest
0 голосов
/ 29 октября 2018

У меня есть PySpark DataFrame -

valuesCol = [('Sweden',31),('Norway',62),('Iceland',13),('Finland',24),('Denmark',52)]
df = sqlContext.createDataFrame(valuesCol,['name','id'])
+-------+---+
|   name| id|
+-------+---+
| Sweden| 31|
| Norway| 62|
|Iceland| 13|
|Finland| 24|
|Denmark| 52|
+-------+---+

Я хочу добавить в этот DataFrame столбец строки, который представляет собой номер строки (серийный номер) строки, как показано ниже -

Мой окончательный результат должен быть:

+-------+---+--------+
|   name| id|row_num |
+-------+---+--------+
| Sweden| 31|       1|
| Norway| 62|       2|
|Iceland| 13|       3|
|Finland| 24|       4|
|Denmark| 52|       5|
+-------+---+--------+

Моя версия Spark 2.2

Я пытаюсь этот код, но он не работает -

from pyspark.sql.functions import row_number
from pyspark.sql.window import Window
w = Window().orderBy()
df = df.withColumn("row_num", row_number().over(w))
df.show()

Я получаю сообщение об ошибке:

AnalysisException: 'Window function row_number() requires window to be ordered, please add ORDER BY clause. For example SELECT row_number()(value_expr) OVER (PARTITION BY window_partition ORDER BY window_ordering) from table;'

Если я правильно понимаю, мне нужно заказать какой-то столбец, но я не хочу что-то вроде этого w = Window().orderBy('id'), потому что это переупорядочит весь DataFrame.

Кто-нибудь может подсказать, как добиться вышеупомянутого вывода с помощью функции row_number()?

1 Ответ

0 голосов
/ 29 октября 2018

Вы должны определить столбец для предложения заказа. Если вам не нужно упорядочивать значения, напишите фиктивное значение. Попробуйте ниже;

from pyspark.sql.functions import row_number,lit
from pyspark.sql.window import Window
w = Window().orderBy(lit('A'))
df = df.withColumn("row_num", row_number().over(w))
...