Прежде всего, var o = {};
и var o = new Array();
не совпадают. Первый инициализирует объект, второй - массив. var o = {};
и var o = new Object();
эквивалентны.
Теперь о производительности использования литерала объекта вместо добавления свойств после. Какой из них самый быстрый? Ответ: нам все равно, и вы тоже этого не должны. Если есть разница в производительности, он будет настолько мал, что он никогда не повлияет, даже если вы сразу создадите 1 миллион объектов, что вряд ли когда-либо произойдет.
Это называется преждевременной оптимизацией и является проклятием многих промежуточных программистов. Не беспокойтесь об оптимизации чего-либо, если у вас не возникнут проблемы с производительностью. Затем вы используете профилировщик, чтобы определить, где находится узкое место, и решить его. Просто подумайте о создании своего приложения.
Для полноты, здесь это тест, который я запускал на jsperf . В моем браузере Chrome 15 инициализация объектного литерала была на 53% быстрее. Ничего себе, 53%, это правда? За исключением того, что вы наводите указатель мыши на подсказку для теста, который использует свойства после инициализации, вы увидите, что он говорит что-то вроде
Ran 681 285 раз за 0.077 секунд.
blockquote >Ваши номера могут отличаться, но вы сможете заметить, что метод, который считается самым медленным, по-прежнему довольно быстро выполняется по любым стандартам. Я думаю, можно с уверенностью сказать, что оба они достаточно быстры для любой цели. Просто используйте тот, который вы предпочитаете.
Для этого нужно использовать функцию glom()
. Давайте возьмем пример.
Давайте сначала создадим DataFrame.
rdd=sc.parallelize([('a',22),('b',1),('c',4),('b',1),('d',2),('e',0),('d',3),('a',1),('c',4),('b',7),('a',2),('f',1)] )
df=rdd.toDF(['key','value'])
df=df.repartition(5,"key") # Make 5 Partitions
Количество разделов -
print("Number of partitions: {}".format(df.rdd.getNumPartitions()))
Number of partitions: 5
Количество строк / элементов в каждом разделе. Это может дать вам представление о перекосе -
print('Partitioning distribution: '+ str(df.rdd.glom().map(len).collect()))
Partitioning distribution: [3, 3, 2, 2, 2]
Посмотрите, как на самом деле строки распределяются по разделам. Обратите внимание, что если набор данных большой, то ваша система может выйти из строя из-за нехватки памяти OOM
.
print("Partitions structure: {}".format(df.rdd.glom().collect()))
Partitions structure: [
#Partition 1 [Row(key='a', value=22), Row(key='a', value=1), Row(key='a', value=2)],
#Partition 2 [Row(key='b', value=1), Row(key='b', value=1), Row(key='b', value=7)],
#Partition 3 [Row(key='c', value=4), Row(key='c', value=4)],
#Partition 4 [Row(key='e', value=0), Row(key='f', value=1)],
#Partition 5 [Row(key='d', value=2), Row(key='d', value=3)]
]