Не удалось собрать в & hellip; из-за отмены этапа, потому что SparkContext был закрыт

Прежде всего, var o = {}; и var o = new Array(); не совпадают. Первый инициализирует объект, второй - массив. var o = {}; и var o = new Object(); эквивалентны.

Теперь о производительности использования литерала объекта вместо добавления свойств после. Какой из них самый быстрый? Ответ: нам все равно, и вы тоже этого не должны. Если есть разница в производительности, он будет настолько мал, что он никогда не повлияет, даже если вы сразу создадите 1 миллион объектов, что вряд ли когда-либо произойдет.

Это называется преждевременной оптимизацией и является проклятием многих промежуточных программистов. Не беспокойтесь об оптимизации чего-либо, если у вас не возникнут проблемы с производительностью. Затем вы используете профилировщик, чтобы определить, где находится узкое место, и решить его. Просто подумайте о создании своего приложения.

Для полноты, здесь это тест, который я запускал на jsperf . В моем браузере Chrome 15 инициализация объектного литерала была на 53% быстрее. Ничего себе, 53%, это правда? За исключением того, что вы наводите указатель мыши на подсказку для теста, который использует свойства после инициализации, вы увидите, что он говорит что-то вроде

Ran 681 285 раз за 0.077 секунд.

blockquote >

Ваши номера могут отличаться, но вы сможете заметить, что метод, который считается самым медленным, по-прежнему довольно быстро выполняется по любым стандартам. Я думаю, можно с уверенностью сказать, что оба они достаточно быстры для любой цели. Просто используйте тот, который вы предпочитаете.

-2
задан user6910411 19 February 2019 в 14:54
поделиться

1 ответ

Для этого нужно использовать функцию 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)]
                          ]
0
ответ дан cph_sto 19 February 2019 в 14:54
поделиться