Spark DataFrame: поддерживает ли groupBy после orderBy этот порядок?

У меня есть датафрейм Spark 2.0example со следующей структурой:

id, hour, count
id1, 0, 12
id1, 1, 55
..
id1, 23, 44
id2, 0, 12
id2, 1, 89
..
id2, 23, 34
etc.

Он содержит 24 записи для каждого идентификатора (по одному на каждый час дня) и упорядочен по id, час, используя функцию orderBy.

Я создал АгрегаторgroupConcat:

  def groupConcat(separator: String, columnToConcat: Int) = new Aggregator[Row, String, String] with Serializable {
    override def zero: String = ""

    override def reduce(b: String, a: Row) = b + separator + a.get(columnToConcat)

    override def merge(b1: String, b2: String) = b1 + b2

    override def finish(b: String) = b.substring(1)

    override def bufferEncoder: Encoder[String] = Encoders.STRING

    override def outputEncoder: Encoder[String] = Encoders.STRING
  }.toColumn

Это помогает мне объединять столбцы в строки для получения этого окончательного фрейма данных:

id, hourly_count
id1, 12:55:..:44
id2, 12:89:..:34
etc.

Мой вопрос, если я делаюexample.orderBy($"id",$"hour").groupBy("id").agg(groupConcat(":",2) as "hourly_count"), гарантирует ли это, что почасовые подсчеты будут упорядочены правильно в соответствующих корзинах?

Я читал, что это не обязательно относится к СДР (см.Spark сортировать по ключу, а затем группировать, чтобы упорядочить повторяемость?), а может, для DataFrames все по-другому?

Если нет, как я могу обойти это?

Ответы на вопрос(5)

Ваш ответ на вопрос