Как поддерживать порядок значений при выполнении свертки в искровом Dataframe - PullRequest
0 голосов
/ 01 июня 2018

Как я могу выполнить сведение нижеследующего фрейма данных, то есть иметь только одну запись для общего ключа и его значений в виде кортежа и поддерживать порядок значений.

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

 +-------------
    |    key| val|
    +-------------
    |      A|4816|
    |      A|5732|
    |      A|5542|
    |      B|5814|
    |      B|5812|
    |      B|5499|
    |      C|5992|
    |      C|7299|
    |      C|5193|

Ожидаемое значение O / P

key | val
A   | (4816, 5732, 5542)
B   | (5814, 5812, 5499)
C   | (5992, 7299, 5193)

Как мне поддерживать порядок значений при выполнении свертки?

1 Ответ

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

Короткий ответ - нет.В общем случае DataFrames являются не заказанными , поэтому нет ничего для сохранения.Кроме того, для агрегации требуется случайное перемешивание, и, как таковое, не гарантируется какой-либо порядок обработки операций.

В определенных случаях вы можете попробовать что-то похожее на:

import org.apache.spark.sql.functions._

df
  .withColumn("id", monotonically_increasing_id)
  .groupBy("key")
  .agg(collect_list(struct($"id", $"val")).alias("val"))
  .select($"key", sort_array($"val").getItem("val").alias("val"))

, но использовать его по своему усмотрениюриск, и только если вы полностью понимаете гарантии вышестоящего плана выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...