Ответ Джастина является удивительным, и этот ответ углубляется.
Алгоритм repartition
выполняет полную перетасовку и создает новые разделы с распределенными данными. Давайте создадим DataFrame с номерами от 1 до 12.
val x = (1 to 12).toList
val numbersDf = x.toDF("number")
numbersDf
содержит 4 раздела на моей машине.
numbersDf.rdd.partitions.size // => 4
Вот как данные делятся на разделы:
Partition 00000: 1, 2, 3
Partition 00001: 4, 5, 6
Partition 00002: 7, 8, 9
Partition 00003: 10, 11, 12
Давайте сделаем полное перетасовку с помощью метода repartition
и получим эти данные на двух узлах.
val numbersDfR = numbersDf.repartition(2)
Вот как numbersDfR
данные разделены на моей машине:
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
Метод repartition
создает новые разделы и равномерно распределяет данные в новых разделах (распределение данных более равномерно для больших наборов данных).
. Разница между coalesce
и repartition
coalesce
использует существующие разделы, чтобы свести к минимуму количество перетасованных данных. repartition
создает новые разделы и выполняет полную перетасовку. coalesce
приводит к разделам с разным количеством данных (иногда разделов с разными размерами) и repartition
приводит к примерно равным размерам разделов.
Быстрее ли coalesce
или repartition
?
coalesce
может работать быстрее, чем repartition
, но разделы с неравным размером, как правило, работают медленнее, чем разделы с равным размером. Как правило, вам необходимо перераспределить наборы данных после фильтрации большого набора данных. Я нашел repartition
более быстрым, потому что Spark построен для работы с равными размерами разделов.
Прочитайте это сообщение в блоге , если вы хотите получить более подробную информацию.
Почему возникает ошибка при создании
blockquote>static Label
, но неstatic Rectangle
?По сути, это вопрос порядка инициализации. Платформа UI должна быть правильно инициализирована при создании объектов
Node
. Потенциально это также может случиться сRectangle
, но, скорее всего,Label
(который являетсяControl
) полагается даже на правильно инициализированную платформу. В этом конкретном случае разница в том, что объектыShape
не требуютCSS
, а объектыControl
-. Это приводит к тому, что методы платформы вызывается как показано в трассировке стека в тот момент, когда инструментарий еще не инициализирован.
- Элемент класса
static
инициализируется при загрузкеclass mvce
, Это делается до вызова методаmain()
и, следовательно, до вызова методаlaunch()
. Платформа еще не инициализирована на данный момент.- Нестатический член, с другой стороны, инициализируется при создании экземпляра
class mvce
.class mvce
создается внутри методаlaunch()
после правильной инициализации инструментария.Кроме того, обычно нет причин использовать статические ссылки. Просто используйте член.
Вы пытались просто объявить статическую метку, но instanciate и установить ее позже в методе start ()? Это тоже должно работать.
Control
имеет статический инициализатор, который эффективно вызываетApplication.setUserAgentStylesheet()
, который делегирует поток приложений FX. Это генерирует исключение для меня, если я создаю элемент управления в обычном ванильном Java-классе (но не в подклассеApplication
, как в коде OP).Rectangle
не требует CSS. – James_D 22 April 2016 в 12:40