¿Cuál es una forma eficiente de particionar por columna pero mantener un conteo de partición fijo?

¿Cuál es la mejor manera de particionar los datos por un campo en un recuento de particiones predefinido?

Actualmente estoy particionando los datos especificando partionCount = 600. Se encuentra que el conteo 600 ofrece el mejor rendimiento de consulta para mi configuración de conjunto de datos / clúster.

val rawJson = sqlContext.read.json(filename).coalesce(600)
rawJson.write.parquet(filenameParquet)

Ahora quiero particionar estos datos por la columna 'eventName' pero aún mantengo el recuento 600. Actualmente, los datos tienen alrededor de 2000 eventNames únicos, más el número de filas en cada eventName no es uniforme. Alrededor de 10 eventNames tienen más del 50% de los datos que causan sesgo de datos. Por lo tanto, si hago la partición como a continuación, no es muy eficiente. La escritura lleva 5 veces más tiempo que sin ella.

val rawJson = sqlContext.read.json(filename)
rawJson.write.partitionBy("eventName").parquet(filenameParquet)

¿Cuál es una buena forma de particionar los datos para estos escenarios? ¿Hay alguna forma de particionar por eventName pero difundir esto en 600 particiones?

Mi esquema se ve así:

{  
  "eventName": "name1",
  "time": "2016-06-20T11:57:19.4941368-04:00",
  "data": {
    "type": "EventData",
    "dataDetails": {
      "name": "detailed1",
      "id": "1234",
...
...
    }
  }
} 

¡Gracias!