Как отсортировать огромный набор данных с помощью Spark Sql - PullRequest
1 голос
/ 25 февраля 2020

У меня есть секционированная таблица с приблизительно 2 миллиардами строк в улье, например:

id, num, num_partition
1, 1253742321.53124121, 12
4, 1253742323.53124121, 12
2, 1353742324.53124121, 13
3, 1253742325.53124121, 12

И я хочу иметь таблицу типа:

id, rank,rank_partition
89,         1, 0
...
1, 1253742321,12
7, 1253742322,12
4, 1253742323,12
8, 1253742324,12
3, 1253742325,12
...
2, 1353742324,13
...

Я пытался сделать это :

df = spark.sql("select *, rank/10000000 from (select id,row_number() over(order by num asc) rank from table)t1")

Это было очень медленно, так как для упорядочения будет использоваться только 1 редуктор

, и я попытался сделать это:

df = spark.sql("select *, rank/10000000 from (select id,row_number() over(distribute by num_partition order by num_partition asc,num asc) rank from table)t1")

Но в результат num_partition не был отсортирован

...