2016-12-04 2 views
-2

У меня есть Dataframe как тоКак добавить условие сортировки в Спарк Dataframe

+-------------------+----+ 
|DATE    |CODE| 
+-------------------+----+ 
|2015/02/30-14:32:32|xv | 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2015/01/30-10:45:16|val2| 
|2016/02/30-07:45:26|cv | 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val3| 
|2016/02/30-12:50:11|val3| 
|2015/01/30-10:45:16|val1| 
|2015/11/30-04:45:19|sd | 
|2015/05/23-10:32:16|val2| 
|2016/09/30-14:45:58|cv | 
|2015/08/30-15:45:00|rt | 
|2016/01/30-10:35:31|cv | 
|2016/06/30-20:35:30|xv | 
|2015/05/23-10:32:16|val1| 
|2016/07/19-22:05:48|rt | 
+-------------------+----+ 

Я использую этот код для сортировки по дате моего Exemple

val df = sc.parallelize(Seq(
    ("2015/02/30-14:32:32", "xv"), 
    ("2016/02/30-12:50:11", "val2"), 
    ("2016/02/30-12:50:11", "val2"), 
    ("2016/02/30-12:50:11", "val2"), 
    ("2015/01/30-10:45:16", "val2"), 
    ("2016/02/30-07:45:26", "cv"), 
    ("2016/02/30-12:50:11", "val1"), 
    ("2016/02/30-12:50:11", "val1"), 
    ("2016/02/30-12:50:11", "val1"), 
    ("2016/02/30-12:50:11", "val3"), 
    ("2015/01/30-10:45:16", "val3"), 
    ("2015/11/30-04:45:19", "sd"), 
    ("2015/05/23-10:32:16", "val2"), 
    ("2016/09/30-14:45:58", "cv"), 
    ("2015/08/30-15:45:00", "rt"), 
    ("2016/01/30-10:35:31", "cv"), 
    ("2016/06/30-20:35:30", "xv"), 
    ("2015/05/23-10:32:16", "val1"), 
    ("2016/07/19-22:05:48", "rt") 
)).toDF("DATE", "CODE") 

val df_sorted = df.sort("DATE") 

df_sorted show false 

я получить этот результат:

+-------------------+----+ 
|DATE    |CODE| 
+-------------------+----+ 
|2015/01/30-10:45:16|val3| 
|2015/01/30-10:45:16|val2| 
|2015/02/30-14:32:32|xv | 
|2015/05/23-10:32:16|val2| 
|2015/05/23-10:32:16|val1| 
|2015/08/30-15:45:00|rt | 
|2015/11/30-04:45:19|sd | 
|2016/01/30-10:35:31|cv | 
|2016/02/30-07:45:26|cv | 
|2016/02/30-12:50:11|val3| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val1| 
|2016/06/30-20:35:30|xv | 
|2016/07/19-22:05:48|rt | 
|2016/09/30-14:45:58|cv | 
+-------------------+----+ 

Я хочу добавить условия сортировки. Я хочу, чтобы все мои кода начинающуюся Вэл в следующем порядке: val2, val1, val3, если они имеют ту же дату YYYY/MM/DD-чч: мм: сс и получить этот результат:

+-------------------+----+ 
|DATE    |CODE| 
+-------------------+----+ 
|2015/01/30-10:45:16|val2| 
|2015/01/30-10:45:16|val1| 
|2015/02/30-14:32:32|xv | 
|2015/05/23-10:32:16|val2| 
|2015/05/23-10:32:16|val1| 
|2015/08/30-15:45:00|rt | 
|2015/11/30-04:45:19|sd | 
|2016/01/30-10:35:31|cv | 
|2016/02/30-07:45:26|cv | 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val3| 
|2016/02/30-12:50:11|val3| 
|2016/06/30-20:35:30|xv | 
|2016/07/19-22:05:48|rt | 
|2016/09/30-14:45:58|cv | 
+-------------------+----+ 

У вас есть Есть идеи?

ответ

1

Предполагая подкожно в hiveContext, если не обернуть sparkContext в улей контексте первого.

df.registerTempTable("MY_TEMP_TABLE); 

val sortedDF = sc.sql("SELECT * FROM MY_TEMP_TABLE ORDER BY DATE ASC, CODE DESC"); 
sortedDF.show 

Или любую версию SQL-сортировки, которую вы хотите запустить.

+0

Мне пришлось сделать мой пример более сложным, чтобы разоблачить мою проблему. У меня был код val3, чтобы уточнить, что мой тип c'ant должен быть только desc или asc –

+0

@ a.moussa, я не знаю, чего вы пытаетесь достичь, но это звучит смешно. Сделайте одну вещь, создайте дополнительный столбец, присвойте числовое значение каждому значению в любом порядке, чем вы хотите сортировать по новому столбцу? Например, каждый новый столбец 1 столбца val2, каждый новый столбец столбца val1, val 3 -> 3. И так далее. Чем сортировать по новой колонке. –

+0

Хорошо, это сработало. :П –

0

можно сортировать по нескольким столбцам:

val df_sorted2 = df.sort("DATE","CODE") 
df_sorted2.show() 

, который дает мне:

+-------------------+----+ 
|    DATE|CODE| 
+-------------------+----+ 
|2015/01/30-10:45:16|val1| 
|2015/01/30-10:45:16|val2| 
|2015/02/30-14:32:32| xv| 
|2015/05/23-10:32:16|val1| 
|2015/05/23-10:32:16|val2| 
|2015/08/30-15:45:00| rt| 
|2015/11/30-04:45:19| sd| 
|2016/01/30-10:35:31| cv| 
|2016/02/30-07:45:26| cv| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val1| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/02/30-12:50:11|val2| 
|2016/06/30-20:35:30| xv| 
|2016/07/19-22:05:48| rt| 
|2016/09/30-14:45:58| cv| 
+-------------------+----+ 
+0

Я повторно редактирую свой вопрос. Я хочу, чтобы мой сорт был более настраиваемым. Я исправлю свой вопрос, говоря, что хочу val2 до val1 –

+0

Так что единственное, чего не хватает, это заказ? вы можете установить, является ли столбец «код» восходящим или нисходящим. Это то, чего вам не хватает? –

+0

Мне пришлось сделать мой пример более сложным, чтобы разоблачить мою проблему. У меня был код val3, чтобы уточнить, что мой тип c'ant должен быть только desc или asc –

Смежные вопросы