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!