O que é uma maneira eficiente de particionar por coluna, mas manter uma contagem de partições fixa?

Qual é a melhor maneira de particionar os dados por um campo na contagem de partições predefinida?

No momento, estou particionando os dados especificando o partionCount = 600. A contagem 600 foi encontrada para fornecer o melhor desempenho de consulta para minha configuração de conjunto de dados / cluster.

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

Agora, quero particionar esses dados pela coluna 'eventName', mas ainda manter a contagem 600. Atualmente, os dados têm cerca de 2000 eventNames exclusivos, mais o número de linhas em cada eventName não é uniforme. Cerca de 10 eventNames têm mais de 50% dos dados causando distorção de dados. Portanto, se eu fizer o particionamento como abaixo, não é muito eficiente. A gravação está demorando 5x mais tempo do que sem.

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

Qual é uma boa maneira de particionar os dados para esses cenários? Existe uma maneira de particionar por eventName, mas espalhá-lo em 600 partições?

Meu esquema fica assim:

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

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion