¿Cuál es la forma más eficiente de hacer una reducción ordenada en PySpark?

Estoy analizando a tiempo los registros de rendimiento de los vuelos nacionales de EE. UU. Desde 2015. Necesito agrupar por número de cola y almacenar una lista ordenada por fecha de todos los vuelos para cada número de cola en una base de datos, para que mi aplicación los recupere. No estoy seguro de cuál de las dos opciones para lograr esto es la mejor.

# Load the parquet file
on_time_dataframe = sqlContext.read.parquet('../data/on_time_performance.parquet')

# Filter down to the fields we need to identify and link to a flight
flights = on_time_dataframe.rdd.map(lambda x: 
  (x.Carrier, x.FlightDate, x.FlightNum, x.Origin, x.Dest, x.TailNum)
  )

Puedo lograr esto en una forma reducida ...

# Group flights by tail number, sorted by date, then flight number, then 
origin/dest
flights_per_airplane = flights\
  .map(lambda nameTuple: (nameTuple[5], [nameTuple]))\
  .reduceByKey(lambda a, b: sorted(a + b, key=lambda x: (x[1],x[2],x[3],x[4])))

O puedo lograrlo en un trabajo de mapa posterior ...

# Do same in a map step, more efficient or does pySpark know how to optimize the above?
flights_per_airplane = flights\
  .map(lambda nameTuple: (nameTuple[5], [nameTuple]))\
  .reduceByKey(lambda a, b: a + b)\
  .map(lambda tuple: 
    (
      tuple[0], sorted(tuple[1], key=lambda x: (x[1],x[2],x[3],x[4])))
    )

Hacer esto en la reducción parece realmente ineficiente, pero de hecho ambos son muy lentos. sorted () parece la forma de hacer esto en los documentos de PySpark, así que me pregunto si PySpark no hace esto kosher internamente. ¿Qué opción es la más eficiente o la mejor opción por alguna otra razón?

Mi código también está en una esencia aquí:https://gist.github.com/rjurney/af27f70c76dc6c6ae05c465271331ade

Si tiene curiosidad acerca de los datos, es de la Oficina de Estadísticas de Transporte, aquí:http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time

Respuestas a la pregunta(1)

Su respuesta a la pregunta