Spark настраиваемый столбец сортировки в Java - PullRequest
0 голосов
/ 27 июня 2018

У меня есть результат из набора данных ниже.

1

+------+---------+--------+
| Col1 |  Col2   | NumCol |
+------+---------+--------+
| abc  | jun2016 |     25 |
| aac  | jun2017 |     28 |
| aac  | dec2017 |     30 |
| aac  | apr2018 |     45 |
+------+---------+--------+

когда применяется сортировка, я получаю результат ниже.

+------+---------+--------+
| Col1 |  Col2   | NumCol |
+------+---------+--------+
| aac  | apr2018 |     45 |
| aac  | dec2017 |     30 |
| aac  | jun2017 |     28 |
| abc  | jun2018 |     25 |
+------+---------+--------+

Но вместо этого должно было быть

+------+---------+--------+
| Col1 |  Col2   | NumCol |
+------+---------+--------+
| aac  | jun2017 |     28 |
| aac  | dec2017 |     30 |
| aac  | apr2018 |     45 |
| abc  | jun2018 |     25 |
+------+---------+--------+

В соответствии с хронологическим порядком. Как я смогу добиться того же.

2. Когда присутствует неделя

Когда у меня есть столбец как Неделя, как показано ниже

+------+-----------------------+--------+
| Col1 |         Week          | NumCol |
+------+-----------------------+--------+
| aac  | 02/04/2018-02/10/2018 |     45 |
| aac  | 02/11/2018-02/17/2018 |     25 |
| aac  | 01/28/2018-02/03/2018 |     30 |
+------+-----------------------+--------+

Я хочу, чтобы это было отсортировано, как показано ниже.

+------+-----------------------+--------+
| Col1 |         Week          | NumCol |
+------+-----------------------+--------+
| aac  | 01/28/2018-02/03/2018 |     30 |
| aac  | 02/04/2018-02/10/2018 |     45 |
| aac  | 02/11/2018-02/17/2018 |     25 |
+------+-----------------------+--------+

Здесь выше я хочу проанализировать дату недели столбца как новую неделю столбца date, затем отсортировать столбец Week и удалить перед возвратом набора данных.

Что-то сложное для меня.

для # 1 Я следовал это Но проблема в том, что если есть Jan2016, Feb2016, Jan2017 это сортируется как Jan2016, Jan2017, Feb2016 .

Нужна помощь для 2

1 Ответ

0 голосов
/ 27 июня 2018

разделить неделю и отсортировать по дате.

import org.apache.spark.sql.functions.split
df.withColumn("_tmp", split($"Week", "-")).select($"Col1", $"Week", $"NumCCol1", $"_tmp".getItem(0).as("_sort")).sort("_sort").drop("_sort").show()

output-

+----+---------------------+--------+
|Col1|Week                 |NumCCol1|
+----+---------------------+--------+
|aac |01/28/2018-02/03/2018|30      |
|aac |02/04/2018-02/10/2018|45      |
|aac |02/11/2018-02/17/2018|25      |
+----+---------------------+--------+
...