Сортировка набора данных по нескольким столбцам - PullRequest
0 голосов
/ 03 июля 2018

У меня есть образец набора данных, как показано ниже.

+---------+--------+---------+---------+---------+
|  Col1   |  Col2  | NumCol1 | NumCol2 | NumCol3 |
+---------+--------+---------+---------+---------+
| Value 1 | Value2 |       6 |       2 |       9 |
| Value 3 | Value4 |       8 |       3 |      12 |
| Value 5 | Value6 |       1 |      11 |       8 |
| Value 7 | Value8 |       4 |      10 |       5 |
+---------+--------+---------+---------+---------+

Мне нужно отсортировать этот набор данных на основе значений столбца (NumCol1, NumCol2, NumCol3), т. Е. Если мне нужно отсортировать этот набор данных в порядке возрастания, мне нужно получить результат ниже.

+---------+--------+---------+---------+---------+
|  Col1   |  Col2  | NumCol1 | NumCol2 | NumCol3 |
+---------+--------+---------+---------+---------+
| Value 5 | Value6 |       1 |      11 |       8 |
| Value 1 | Value2 |       6 |       2 |       9 |
| Value 3 | Value4 |       8 |       3 |      12 |
| Value 7 | Value8 |       4 |      10 |       5 |
+---------+--------+---------+---------+---------+

строка с Value 5 Value6 1 11 8 была на первом месте, так как она имеет наименьшее значение 1 , так же, как и следующие.

Если в порядке убывания, результат будет:

+---------+--------+---------+---------+---------+
|  Col1   |  Col2  | NumCol1 | NumCol2 | NumCol3 |
+---------+--------+---------+---------+---------+
| Value 3 | Value4 |       8 |       3 |      12 |
| Value 5 | Value6 |       1 |      11 |       8 |
| Value 7 | Value8 |       4 |      10 |       5 |
| Value 1 | Value2 |       6 |       2 |       9 |
+---------+--------+---------+---------+---------+

Возможно ли сделать эту искру? Как удастся добиться того же?

1 Ответ

0 голосов
/ 03 июля 2018

Используйте least и greatest для расчета минимума и максимума среди трех столбцов, а затем упорядочите их. В pyspark :

По возрастанию наименьшее значение:

import pyspark.sql.functions as f
df.orderBy(f.least(f.col('NumCol1'), f.col('NumCol2'), f.col('NumCol3'))).show()
+-------+------+-------+-------+-------+
|   Col1|  Col2|NumCol1|NumCol2|NumCol3|
+-------+------+-------+-------+-------+
|Value 5|Value6|      1|     11|      8|
|Value 1|Value2|      6|      2|      9|
|Value 3|Value4|      8|      3|     12|
|Value 7|Value8|      4|     10|      5|
+-------+------+-------+-------+-------+

По убыванию по наибольшему значению:

df.orderBy(f.greatest(f.col('NumCol1'), f.col('NumCol2'), f.col('NumCol3')).desc()).show()
+-------+------+-------+-------+-------+
|   Col1|  Col2|NumCol1|NumCol2|NumCol3|
+-------+------+-------+-------+-------+
|Value 3|Value4|      8|      3|     12|
|Value 5|Value6|      1|     11|      8|
|Value 7|Value8|      4|     10|      5|
|Value 1|Value2|      6|      2|      9|
+-------+------+-------+-------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...