Size: a a a

2021 December 02

SI

Sergey Ivanychev in Moscow Spark
для операции сверху план выглядит примерно так
источник

ЕГ

Евгений Глотов... in Moscow Spark
Конвертация в rdd это недёшево, а суть операции ровно такая же
источник

ЕГ

Евгений Глотов... in Moscow Spark
Ну а чукча что видит, то и поёт
источник

ЕГ

Евгений Глотов... in Moscow Spark
Репартишен = эксченж
источник

SI

Sergey Ivanychev in Moscow Spark
суть не такая же, repartitionAndSortWithinPartitions не делает сортировку в партициях, а делает k-merge уже отсортированных shuffle-партиций
источник

SI

Sergey Ivanychev in Moscow Spark
Судя по плану .repartition(…).sortWithinPartitions(…) так не делает, и у меня это вызывает вопрос
источник

ЕГ

Евгений Глотов... in Moscow Spark
Оно делает ровно то, что и написано, непонятно, в чём вопрос)
источник

SI

Sergey Ivanychev in Moscow Spark
Недоумение вызывает то, что .repartitionAndSortWithinPartitions(…) делает это более оптимально чем .repartition(…).sortWithinPartitions(…), но этот API доступен только из RDD
источник

SI

Sergey Ivanychev in Moscow Spark
Я бы ожидал что .repartition(…).sortWithinPartitions(…) транслировался в подобный repartitionAndSortWithinPartitions физический план, но такого не происходит
источник

ЕГ

Евгений Глотов... in Moscow Spark
Rdd api щас ничего общего не имеет с dataframe api
источник

ИК

Иван Калининский... in Moscow Spark
Никакого недоумения не должно быть, это разные операции, они не сливаются в одну. Указан repartition - будет repartition, потом локальный сорт - он и будет, возможно, по другим полям. Если нужно, чтобы выполнен был .repartionAndSortWithinPartitions, его и надо выполнять
источник

SI

Sergey Ivanychev in Moscow Spark
repartionAndSortWithinPartitions как раз позволяет репартицировать по одним полям и сортировать по другим. Почему из DataFrame API оно не фьюзится в то, как это делается в repartionAndSortWithinPartitions?
источник

ИК

Иван Калининский... in Moscow Spark
Потому что так не сделано в стратегиях Spark))

def repartitionAndSortWithinPartitions(partitioner: Partitioner): RDD[(K, V)] = self.withScope {
 new ShuffledRDD[K, V, V](self, partitioner).setKeyOrdering(ordering)
}
private val ordering = implicitly[Ordering[K]]

Я отдельно делал, чтобы был k-way merge по другим полям
источник

ИК

Иван Калининский... in Moscow Spark
версия 2.4, да
источник

SI

Sergey Ivanychev in Moscow Spark
я как раз понимаю что не сделано, просто на мой взгляд странно что эта техника по дефолту доступна из RDD API и недоступна из DataFrame API
источник

SI

Sergey Ivanychev in Moscow Spark
Через кастомный оператор делал?
источник

SI

Sergey Ivanychev in Moscow Spark
Было бы очень интересно как можно это фокус провернуть, не проваливаясь в RDD
источник

ИК

Иван Калининский... in Moscow Spark
https://habr.com/ru/company/sberbank/blog/583018/

Вот вторая часть статьи, опубликовал в октябре, код прямо в ней (особенности публикации)
источник

SI

Sergey Ivanychev in Moscow Spark
Иван, спасибо!
источник

ДД

Джон Дориан... in Moscow Spark
Коллеги, всем привет!
В Спарке 2.4 включена dynamic allocation.

Джоба в процессе выполнения запрашивает какое-то бешеное количество экзекьюторов.
В логах вижу сообщения типа:

Request 20 additional executors.
New desirable count of executors = 250

Request 35 additional executors.
New desirable count of executors = 285.

При запуске было указано число экзекьюторов=9, 5 ядер на каждом, 10 Гб памяти на каждом.

С чем может быть связан такой большой запрос на новые экзекьюторы? Там цифры до 400 доходят
источник