Как эффективен способ разделения на столбцы, но с фиксированным количеством разделов?

Каков наилучший способ разбить данные по полю на предопределенное количество разделов?

В настоящее время я делю данные, указав partionCount = 600. Найдено, что число 600 дает лучшую производительность запросов для моей установки набора данных / кластера.

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

Теперь я хочу разделить эти данные по столбцу «eventName», но при этом оставить счет 600. В настоящее время в данных содержится около 2000 уникальных eventNames, плюс число строк в каждом eventName не одинаково. Около 10 eventNames содержат более 50% данных, вызывающих перекос данных. Следовательно, если я делаю разбиение, как показано ниже, это не очень эффективно. Запись занимает в 5 раз больше времени, чем без.

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

Каков хороший способ разделения данных для этих сценариев? Есть ли способ разделить по eventName, но распределить это на 600 разделов?

Моя схема выглядит так:

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

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос