Apache Искра: взрыв приводит к случайному разливу - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть 40 ГБ CSV-файлов. Прочитав их, мне нужно выполнить серию преобразований. Одним из них является взрыв колонны. После этой трансформации я получаю разлитую смесь, изображенную ниже. Я понимаю, почему это так. Взрыв основан на поиске переменной вещания, который дает очень искаженный набор результатов.

Мой вопрос - как я могу смягчить разлив? Я попытался перераспределить до функции explode, настроив параметр конфигурации spark.sql.shuffle.partitions, чтобы гарантировать, что разделы в случайном порядке имеют одинаковый размер, но это не помогло.

Любые предложения или литература по темам c будет принята с благодарностью!

Spill

1 Ответ

0 голосов
/ 02 апреля 2020

Если вы работаете с RDD, вы можете использовать встроенные разделители Spark для настройки распределения ваших данных по разделам. Вы можете выбрать между HashPartitioner и RangePartitioner. Оба работают для дискретных значений и непрерывных значений.

Пример HashPartitioner:

import org.apache.spark.HashPartitioner

val rdd = df.rdd // convert DataFrame to low-level RDD
val keyedRDD = rdd.keyBy(...) // define your custom key
keyedRDD.partitionBy(new HashPartitioner(n))

Пример Partitioner:

import org.apache.spark.Partitioner

class DomainParitioner extends Partitioner {
  def numPartitions = n
  def getPartition(key: Any): Int = {
    // your custome partition logic
  }
}

keyedRDD.partitionBy(new DomainPartitioner).map(_._1).glom().map(_.toSet.toSeq.length)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...