Was ist ein effizienter Weg, um nach Spalten zu partitionieren, aber eine feste Partitionsanzahl beizubehalten?

Was ist der beste Weg, um die Daten nach einem Feld in vordefinierte Partitionszahlen zu unterteilen?

Ich partitioniere derzeit die Daten durch Angabe von partionCount = 600. Es wurde festgestellt, dass die Anzahl 600 die beste Abfrageleistung für mein Dataset / Cluster-Setup bietet.

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

Now Ich möchte diese Daten nach der Spalte 'eventName' partitionieren, aber die Anzahl 600 beibehalten. Die Daten haben derzeit etwa 2000 eindeutige eventNames, plus die Anzahl der Zeilen in jedem eventName ist nicht einheitlich. Rund 10 eventNames verursachen bei mehr als 50% der Daten einen Datenversatz. Daher, wenn ich die Partitionierung wie unten mache, ist es nicht sehr performant. Das Schreiben dauert 5x länger als ohne.

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

Was ist eine gute Möglichkeit, die Daten für diese Szenarien zu partitionieren? Gibt es eine Möglichkeit, nach eventName zu partitionieren, dies jedoch auf 600 Partitionen zu verteilen?

Mein Schema sieht so aus:

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

Vielen Dank