Сохранение количества разделов фрейма данных Spark после преобразования

Я смотрю на ошибку в коде, когда фрейм данных был разделен на слишком много разделов, чем хотелось (более 700), и это вызывает слишком много операций перемешивания, когда я пытаюсь переразбить их только до 48. Я не могу использовать объединение () здесь, потому что я хочу иметь меньше разделов, прежде чем я сделаю повторное разделение.

Ищу способы уменьшить количество разделов. Скажем, у меня есть искровый фрейм данных (с несколькими столбцами), разделенный на 10 разделов. Мне нужно сделать преобразование orderBy на основе одного из столбцов. Будет ли в итоговом фрейме данных такое же количество разделов после выполнения этой операции? Если нет, то как Spark определит количество разделов?

Кроме того, какие еще преобразования могут вызвать изменение количества разделов для фрейма данных, о которых мне нужно знать, кроме очевидных, таких как repartition ()?


person John Subas    schedule 12.09.2017    source источник


Ответы (1)


Количество разделов для операций, требующих обмена, определяется spark.sql.shuffle.partitions. Если вам нужно определенное значение, вы должны установить его перед выполнением команды:

scala> val df = spark.range(0, 1000)
df: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> spark.conf.set("spark.sql.shuffle.partitions", 1)

scala> df.orderBy("id").rdd.getNumPartitions
res1: Int = 1

scala> spark.conf.set("spark.sql.shuffle.partitions", 42)

scala> df.orderBy("id").rdd.getNumPartitions
res3: Int = 42       
person Alper t. Turker    schedule 12.09.2017