Spark DataFrame: ne groupBy après orderBy maintenir l'ordre?

J'ai une Spark 2.0 dataframe example avec la structure suivante:

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

Il contient 24 entrées pour chaque id (une pour chaque heure de la journée) et est commandé par id, heure à l'aide de la orderBy fonction.

J'ai créé un Agrégateur 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

Il me permet de concaténer des colonnes dans les chaînes pour obtenir cette finale dataframe:

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

Ma question est, si je ne example.orderBy($"id",$"hour").groupBy("id").agg(groupConcat(":",2) as "hourly_count"), ne fait que garantir que l'horaire de compte sont classés correctement dans leurs seaux?

J'ai lu que ce n'est pas forcément le cas de Rdd (voir Étincelle de tri par clé, puis en groupe pour faire commandés itératif?), mais peut-être que c'est différent pour DataFrames ?

Si non, comment puis-je contourner cela ?

OriginalL'auteur Ana Todor | 2016-09-15