Как эффективен способ разделения на столбцы, но с фиксированным количеством разделов?
Каков наилучший способ разбить данные по полю на предопределенное количество разделов?
В настоящее время я делю данные, указав 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",
...
...
}
}
}
Спасибо!