Tengo un RDD en la chispa. Cada elemento de la RDD es una lista.
Por otra parte, todos los elementos son listas de patrón similar, por lo que su un poco como una tabla.
Necesito el RDD ordenados por algunas de las columnas, en un determinado orden de prioridad.

¿Cómo puedo lograr esto?

PS : Esto es lo que he intentado.

Traté de ordenar por el campo con la prioridad más alta, entonces el grupo por él, a continuación, ordenar cada resultado por el campo con la segunda prioridad más alta. Yo lo hice de esta forma recursiva, y se unió a los resultados.
Pero, el uso de RDD.groupBy tantas veces lo hizo muy muy lento.

  • No, no, no. Sería bueno hacer algo por su cuenta. A continuación, nos muestran lo que tienes. Por favor, lea cómo pedir, eventualmente.
  • Probé varias ideas, sólo para encontrar que están rotundamente equivocados o son ineficaces.

1 Comentario

  1. 9

    Si simplemente desea ordenar en orden ascendente /descendente hay dos piezas que necesita para hacer el trabajo:

    • DDR.rdd.sortBy función de que «tipo (…) RDD por los keyfunc«
    • conocimiento de que Python lists y tuples se comparan lexicográficamente:

      >>> (1, 2) < (3, 4)
      True
      >>> (5, 6) < (3, 4)
      False
      >>> ("foo", 1) < ("foo", 2, 5)
      True
      >>> ("bar", 1, 2) > ("bar", 1)
      True

    Simplemente combinar estos dos en algo como rdd.sortBy(lambda x: (x[0], x[3])) y ya está bueno para ir.

    Si usted necesita mixto orden (descendente por algunos valores, ascendiendo por otros) en valores no numéricos puede incrustar esta lógica dentro de keyfunc o convertir RDD a un DataFrame y uso orderBy método con desc:

    df.orderBy(desc("foo"), "bar")

Dejar respuesta

Please enter your comment!
Please enter your name here